При обновлении записи в 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, чтобы отразить, что это на самом деле строка, а не число, которое вы храните (числа не имеют предшествующих нулей).
Итак, резюмируем:
- Проверьте свой
DEPT
столбец используетVARCHAR
Тип данных. - Измените ваш 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;"