在使用查询更新Sql中的记录时... 0(零)在存储在数据库中时被省略

时间:2017-09-15 07:04:05

标签: sql oracle shell openvms dcl

我的要求是 - 我试图将用户输入的值存储到数据库中(数据库中的一个表)。但是当我进入 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 个答案:

答案 0 :(得分:3)

您的数据类型存在问题。

首先,DEPT的列类型不能是整数 - 整数不会与前面的零一起存储。

因此,如果将整数列设置为02150,则该数字变为2150,因为在整数的上下文中,前面的0是无意义的。

为了解决此问题,您应该为数据库中的VARCHAR列使用DEPT类型数据类型。

此外,您需要更改SQL查询以反映这实际上是一个字符串而不是您正在存储的数字(数字没有前面的零)。

所以,回顾一下:

  1. 验证您的DEPT列是否使用VARCHAR类型数据类型。
  2. 更改您的SQL查询以反映它是一个字符串而不是您正在存储的数字。
  3. 示例:

    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;"