Mat*_*t M 3 sql oracle plsql oracle11g
有没有办法在进行游标提取时判断哪条记录导致错误?例如,假设我有一个包含一列(varchar2)的表,"value",其中包含以下值:
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;
Run Code Online (Sandbox Code Playgroud)
在遇到'g'之前,它会没有问题吗?这是我正在尝试调试的真正问题的一个简单示例.在实际示例中,它输出异常消息,而不是其他任何内容.这是否意味着它是第一个导致问题的记录,或者它不能以这种方式工作?
它应该输出值,直到遇到有异常的行,至少根据我对你的程序的测试.也就是说,除非您在查询中执行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;
/
Run Code Online (Sandbox Code Playgroud)