【发布时间】:2017-02-19 20:25:07
【问题描述】:
我有一个问题。
我有一个配置表 AB,其中一行标记为“sysdate-360”
col1 ||col2
AB || sysdate-360
BC || sysdate -2
当我编写一个程序从我使用的配置表 AB 中获取日期值时。
v_date varchar(20);
cursor c1 as
select col2 from AB;
then
for ab_date in c1
loop
select ab_date.col2 into v_date from dual;
v_sql := 'delete from any_table where load_date <='||v_date;
execute immediate v_sql ;
commit;
end loop;
程序已编译,但当我执行时出现以下错误
ORA-01722: 无效号码
ORA-06512: 在“程序”第 46 行
ORA-06512: 在第 1 行
01722. 00000 - “无效号码”
*原因:
*行动:
sysdate -360 被视为 char 但不是日期,因为 SYSDATE 本身就是一个日期,对吧?
请帮忙。
【问题讨论】:
-
大概
load_date是一个日期类型。由于您的光标查询看起来不正确,您的混淆有点令人困惑 - 真的是from config_table where col1 = AB吗?并且您没有指出哪一行对应于错误中的第 46 行。col1是什么数据类型,因为你让它看起来像一个 varchar?如果它是一个字符串,AB是一个数字,并且您没有将它括在引号中,并且col1的值不是 数字吗?我认为错误来自游标查询,与日期无关...... -
我认为您应该对传递给
execute immediate的v_sql中的值进行调试。这可能会揭示您的问题,例如v_sql中缺少空格。