При обновлении записи в Sql с помощью запроса...0(ноль) опускается при хранении в базе данных

Мое требование - я пытаюсь сохранить значение, введенное пользователем в базу данных (одна из таблиц в базе данных). Но когда я вхожу в 0921 как отдел, то 0 (ноль) пропускается и только 921 сохраняется в базе данных!! Что дает неправильный вывод и неправильные результаты для меня.

$ write SQL "set feedback on"
$ write SQL "spool  Manager:[Aksh]akshay4.log"
$ write SQL "define IEMP_ID = '" + Ref + "';"
$ write SQL "define IYEAR = '" + File + "';"
$ write SQL "define IDEPT = '" + DEPT + "';"
$ write SQL "define IACC = '" + ACC + "';"
$ write SQL "Update EMPLOYEE set DEPT=&IDEPT where EMP_ID=&IEMP_ID and year=&IYEAR and ACC=&ACC;
$ write SQL "commit;"
$ write SQL "exit;"
$ close SQL

Когда я запустил приведенный выше код, я увидел следующий вывод:

old   1: Update employee set DEPT=&IDEPT where EMP_ID=&EMP_ID and year=&IYEAR and ACC=&ACC;
new   1: Update employee set DEPT=02150 where EMP_ID=14447 and year=2017 and ACC=1

Но когда я проверяю базу данных после запуска кода.. Я мог видеть, что только 2150 сохраняется в базе данных... Есть предложения по этому вопросу?

2 ответа

Решение

У вас есть проблема с вашим типом данных.

Прежде всего, ваш тип столбца для DEPT не может быть целым числом - целые числа не сохраняются с предыдущими нулями.

Так что если вы установите целочисленный столбец 02150номер становится 2150 потому что в контексте целого числа предыдущий 0 не имеет смысла.

Чтобы это исправить, вы должны использовать VARCHAR введите тип данных для вашего DEPT столбец в базе данных.

Кроме того, вам нужно изменить запрос SQL, чтобы отразить, что это на самом деле строка, а не число, которое вы храните (числа не имеют предшествующих нулей).

Итак, резюмируем:

  1. Проверьте свой DEPT столбец использует VARCHAR Тип данных.
  2. Измените ваш SQL-запрос, чтобы отразить в нем строку, а не число, которое вы храните.

Пример:

Update employee set DEPT='02150' where EMP_ID=14447 and year=2017 and ACC=1

Пропустите среднего человека, будучи "определяет". Просто сделайте так, чтобы DCL генерировал нужную строку. В приведенном ниже примере предполагается, что переменные DCL являются чистыми строками, чтобы сохранить начальные нули и пробелы, как указали другие. Если некоторые переменные являются целыми числами, то вы должны заставить их быть строкой, заставляющей подстановку внутри двойных кавычек, используя

"''numeric_variable'"

предложение:

$ write SQL "set feedback on"
$ write SQL "spool  Manager:[Aksh]akshay4.log"
$ write SQL "Update EMPLOYEE set DEPT='" + dept 
    + "' where EMP_ID='" + ref
    + "' and YEAR='" + file 
    + "' and ACC='" + acc
    + "';"
$ write SQL "commit;" 
$ write SQL "exit;"
Другие вопросы по тегам