Как я могу сказать, какая запись вызывает ошибку при выполнении выбора курсора? - PullRequest
3 голосов
/ 13 июля 2011

Есть ли способ узнать, какая запись вызывает ошибку при выполнении выбора курсора?Например, допустим, у меня есть таблица с одним столбцом (varchar2), «значение», со следующими значениями:

1, 2, 3, 4, г, 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 Ответ

6 голосов
/ 14 июля 2011

Он должен выводить значения до тех пор, пока не встретится строка с исключением, по крайней мере, согласно моему тесту вашей процедуры.То есть, если вы не выполняете 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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...