我有一个包含项目库存的表格,我想用系统日期更新已过期的日期。但它的错误:
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。我试过谷歌搜索,但它给出了不同的答案。
答案 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.