使用查询更新 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 查询以反映这实际上是一个字符串而不是您要存储的数字(数字前面没有零)。
所以,回顾一下:
- 验证您的
DEPT
列使用的是 VARCHAR
类型数据类型。
- 更改您的 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;"
我的要求是 -- 我正在尝试将用户输入的值存储到数据库中(数据库中 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 查询以反映这实际上是一个字符串而不是您要存储的数字(数字前面没有零)。
所以,回顾一下:
- 验证您的
DEPT
列使用的是VARCHAR
类型数据类型。 - 更改您的 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;"