Sql 获取时强制Oracle错误

Sql 获取时强制Oracle错误,sql,oracle,ora-01722,Sql,Oracle,Ora 01722,我试图调试应用程序中的一个奇怪行为。为了做到这一点,我需要重现一个场景,在这个场景中,SQLSelect查询将抛出一个错误,但只有在实际从游标获取时才会抛出错误,而不是在执行查询本身时抛出错误。这能做到吗?任何错误都可以,但是ORA-01722:无效号码似乎是显而易见的尝试 我创建了一个具有以下内容的表: KEYCOL INTEGER PRIMARY KEY OTHERCOL VARCHAR2(100) 然后,我创建了几百行,其中主键的值是唯一的,而othercol的值是l。然后,我运行了一个

我试图调试应用程序中的一个奇怪行为。为了做到这一点,我需要重现一个场景,在这个场景中,SQLSelect查询将抛出一个错误,但只有在实际从游标获取时才会抛出错误,而不是在执行查询本身时抛出错误。这能做到吗?任何错误都可以,但是
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);