我的要求是 - 我试图将用户输入的值存储到数据库中(数据库中的一个表)。但是当我进入 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 被保存在数据库中... 对此有何建议??
答案 0 :(得分:3)
您的数据类型存在问题。
首先,DEPT
的列类型不能是整数 - 整数不会与前面的零一起存储。
因此,如果将整数列设置为02150
,则该数字变为2150
,因为在整数的上下文中,前面的0是无意义的。
为了解决此问题,您应该为数据库中的VARCHAR
列使用DEPT
类型数据类型。
此外,您需要更改SQL查询以反映这实际上是一个字符串而不是您正在存储的数字(数字没有前面的零)。
所以,回顾一下:
DEPT
列是否使用VARCHAR
类型数据类型。示例:
Update employee set DEPT='02150' where EMP_ID=14447 and year=2017 and ACC=1
答案 1 :(得分:0)
略过中间人,成为'定义'。 只需要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;"