SQL错误:ORA-01722:无效的数字(更新sysdate时)

时间:2015-02-06 02:14:25

标签: sql oracle

我有一个包含项目库存的表格,我想用系统日期更新已过期的日期。但它的错误:

Error starting at line : 1 in command -
update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate)
 WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    
*Action:

这是我的剧本:

update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate)
 WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null;

TGL_TIBA是Date列。我使用SQL Developer。我试过谷歌搜索,但它给出了不同的答案。

1 个答案:

答案 0 :(得分:1)

我可以看到您使用所描述的表结构收到此错误的唯一方法是将factor绑定变量声明为数字,并且您的faktur列中的值是否为非数字字符 - 这是合理的,因为它是一个字符串:

create table AMU_POHEAD_T (
  KD_STORE VARCHAR2(4 BYTE),
  FAKTUR VARCHAR2(15 BYTE),
  NO_LPB VARCHAR2(10 BYTE),
  TGL_TIBA DATE
);

insert into AMU_POHEAD_T values ('1400', '000000000039746', null, sysdate - 30);
insert into AMU_POHEAD_T values ('1400', 'A00000000039746', null, sysdate - 30);

variable factor number;

exec :factor := '000000000039746';

update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate)
 WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null;

SQL Error: ORA-01722: invalid number

如果factor是一个数字,那么列值将被隐式转换为数字以进行比较,并尝试转换非数字值并抛出该错误 - 例如这里隐含to_number('A00000000039746')

如果factor是字符串,则不会发生转换:

var factor varchar2(15 byte);

exec :factor := '000000000039746';

update AMU_POHEAD_T SET TGL_TIBA=trunc(sysdate)
 WHERE KD_STORE='1400' AND FAKTUR=:Factor and no_lpb is null;

1 rows updated.