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

While updating the record in Sql using query...0(Zero) is getting omitted while storing in database

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

您的数据类型有问题。

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

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

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

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

所以,回顾一下:

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

示例:

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

跳过中间人,成为 'defines'。 只需让 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;"