Возврат ошибок из PL / SQL - PullRequest
2 голосов
/ 07 февраля 2011

Быстрый и простой вопрос:

Я пишу хранимую процедуру PL / SQL. Он содержит несколько вызовов execute immediate, которые могут быть неудачными. Я не хочу выдавать ошибку. Я хотел бы, чтобы хранимая процедура завершала свое выполнение чисто и возвращала список ошибок. Что-то вроде:

for vRecord in vCursor
loop
    begin
        execute immediate 'insert into t(a) values (' || vRecord.val || ')';
    when others then
        -- store the error somewhere to return it!!
    end;
end loop;

Итак, мой вопрос: каков рекомендуемый способ возврата этих ошибок? Стол? Выходной параметр?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Начиная с версии 10g Release 2 и далее, вы можете использовать DML Error Logging для хранения всех ошибок в специальной таблице.Вы можете прочитать об этом здесь:

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/d_errlog.htm#ARPLS680

Некоторые другие советы, основанные на опубликованном вами коде:

1) Здесь не обязательно использовать динамический SQL.Просто используйте это вместо:

insert into t(a) values (vRecord.val);

2) Здесь нет необходимости использовать цикл.Просто используйте вместо этого INSERT / SELECT:

insert into t(a) select [the query from your vCursor here]

С уважением,
Роб.

3 голосов
/ 07 февраля 2011

Ничего себе, я только что ответил на аналогичный вопрос в другой ветке, странный день до сих пор.Используйте таблицу LOG и используйте автономные транзакции, если вы просто хотите регистрировать ошибки (или сообщения):

См. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...