在进行游标提取时,如何判断哪个记录导致错误?
Posted
技术标签:
【中文标题】在进行游标提取时,如何判断哪个记录导致错误?【英文标题】:How can I tell which record causes the error while doing a cursor fetch? 【发布时间】:2011-07-13 19:24:47 【问题描述】:在进行游标提取时,有什么方法可以判断是哪条记录导致了错误?例如,假设我有一个表,其中有一列 (varchar2),“值”,具有以下值:
1, 2、 3、 4、 G, 5、 6
我执行以下操作:
DECLARE
answer number;
CURSOR c1 IS
SELECT to_number(value) FROM table;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO answer;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(answer);
END LOOP;
CLOSE c1;
EXCEPTION WHEN invalid_number THEN
dbms_output.put_line('an invalid number exception was encountered');
END;
在遇到“g”之前,它会毫无问题地输出吗?这是我正在尝试调试的实际问题的一个简单示例。在实际示例中,它只输出异常消息,仅此而已。这是否意味着它是导致问题的第一条记录,或者它只是不能以这种方式工作?
【问题讨论】:
【参考方案1】:它应该输出值直到遇到异常的行,至少根据我对您的程序的测试。也就是说,除非您在查询中执行 ORDER BY,否则您可能会在获取任何行之前看到异常。
您可以通过尝试在您的选择中不使用 TO_NUMBER 函数来亲自查看正在获取的内容。这样的事情可能会有所帮助:
DECLARE
answer number;
temp VARCHAR2(10);
CURSOR c1 IS
SELECT ID FROM table;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO temp;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT(temp||': Converted is: ');
dbms_output.put_line(to_number(temp));
END LOOP;
CLOSE c1;
EXCEPTION WHEN invalid_number THEN
dbms_output.put_line('an invalid number exception was encountered');
WHEN OTHERS THEN
dbms_output.put_line('Some other error');
END;
/
【讨论】:
另请注意,如果错误出现在 where 子句中(例如WHERE TO_NUMBER(value) > 0
),那么在获取任何数据之前您也会收到错误。
谢谢你们俩!这解释了为什么在我测试时生产代码不显示任何内容。在 where 子句中有一个 AND 失败的 to_number 函数的顺序。以上是关于在进行游标提取时,如何判断哪个记录导致错误?的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以判断哪个状态更改导致在 SwiftUI 中重建视图?