1

我的要求是——我试图将用户输入的值存储到数据库中(数据库中的表之一)。但是当我输入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被保存在数据库中......对此有什么建议吗?

4

2 回答 2

3

您的数据类型有问题。

首先,您的列类型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

于 2017-09-15T07:40:55.350 回答
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;"
于 2017-09-16T15:52:22.210 回答