Буферизуется ли 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.
Может кто-нибудь объяснить, чтосо мной такое поведение?