Sql 获取时强制Oracle错误
我试图调试应用程序中的一个奇怪行为。为了做到这一点,我需要重现一个场景,在这个场景中,SQLSelect查询将抛出一个错误,但只有在实际从游标获取时才会抛出错误,而不是在执行查询本身时抛出错误。这能做到吗?任何错误都可以,但是Sql 获取时强制Oracle错误,sql,oracle,ora-01722,Sql,Oracle,Ora 01722,我试图调试应用程序中的一个奇怪行为。为了做到这一点,我需要重现一个场景,在这个场景中,SQLSelect查询将抛出一个错误,但只有在实际从游标获取时才会抛出错误,而不是在执行查询本身时抛出错误。这能做到吗?任何错误都可以,但是ORA-01722:无效号码似乎是显而易见的尝试 我创建了一个具有以下内容的表: KEYCOL INTEGER PRIMARY KEY OTHERCOL VARCHAR2(100) 然后,我创建了几百行,其中主键的值是唯一的,而othercol的值是l。然后,我运行了一个
ORA-01722:无效号码似乎是显而易见的尝试
我创建了一个具有以下内容的表:
KEYCOL INTEGER PRIMARY KEY
OTHERCOL VARCHAR2(100)
然后,我创建了几百行,其中主键的值是唯一的,而othercol的值是l
。然后,我运行了一个选择*查询,在中间选择了一行,并将其更新到字符串<代码> ABCD 。我运行了查询selectkeycol,从SOMETABLE
中查找数字(OTHERCOL),希望得到一些好的数据行,然后出错。但我在执行步骤本身上不断得到ORA-01722:invalid number
我使用ADO(带有服务器端游标)和JDBC以及PL/SQL开发人员通过编程实现了这种行为。我怎样才能得到我想要的结果?谢谢
编辑-用于添加,在使用ADO时,我只调用命令。执行。我没有创建或打开记录集。此pl/SQL匿名块在光标的第三次迭代中复制错误:
BEGIN
FOR c1_rec IN (WITH example AS
(SELECT '1' TEST_DATA
FROM DUAL
UNION
SELECT '2' TEST_DATA
FROM DUAL
UNION
SELECT '3A' TEST_DATA
FROM DUAL)
SELECT TO_NUMBER (TEST_DATA) TEST_NUM
FROM example)
LOOP
DBMS_OUTPUT.PUT_LINE ('Called ' || c1_rec.TEST_NUM);
END LOOP;
END;
输出:
Called 1
Called 2
Error at line 2
ORA-01722: invalid number
ORA-06512: at line 2
它可能是选择了一个非常大的批次(如1000)。
这可能是因为,当您进行更新时,由于某种原因,该行很早就被拾取
不确定是否有帮助,但您可以从流水线表函数中进行选择,该函数可以让您更精确地控制是否以及何时返回错误
create or replace function ret_err return sys.dbms_debug_vc2coll pipelined is
begin
for i in 1..200 loop
pipe row ('test');
end loop;
raise_application_error (-20001,'Error here');
return;
end;
/
select * from table(ret_err);