Буферизуется ли dbms_output.put () иначе, чем dbms_output.put_line ()?

Я использую Aqua Data Studio для отладки хранимого процесса путем разброса выходных отчетов по всему.

У меня есть оператор удаления в пакете, который нарушает ограничение целостности:

DELETE FROM x WHERE x.ID = an_x_with_children;

Мой процесс завершается неудачно с ORA-02292 на этой линии, как и ожидалось. Я хочу увидеть ценностьan_x_with_children переменная. Таким образом, я обертываю строку с выводами так:

dbms_output.put('Attempting to delete x: ' || an_x_with_children);
DELETE FROM x WHERE x.ID = an_x_with_children;
dbms_output.put(' Success');

И ожидайте увидеть сообщение как последнюю вещь в консоли сообщений до нарушения целостности сообщения об ошибке.Но это нет распечатать!

Теперь, если я изменю выход, чтобы использоватьput_line() процедура такая:

dbms_output.put_line('Attempting to delete x: ' || an_x_with_children);
DELETE FROM x WHERE x.ID = an_x_with_children;
dbms_output.put_line(' Success');

Я вижу сообщениеПопытка удалить x: 123 " непосредственно перед ошибками proc.

документы дляdbms_output пакет нене говоря уже оput а такжеput_line процедуры ведут себя по-другому в этом отношении. Например, это говорит

Вывод, который вы создаете с помощью PUT или PUT_LINE, буферизуется.

Так что я ожидаю, что либо оба, либо ни один не покажет вывод при ошибках proc.

Может кто-нибудь объяснить, чтосо мной такое поведение?

Ответы на вопрос(1)

Ваш ответ на вопрос