O dbms_output.put () está sendo armazenado em buffer de forma diferente de dbms_output.put_line ()?

Estou usando o Aqua Data Studio para depurar um procedimento armazenado dispersando as instruções de saída.

Eu tenho uma instrução de exclusão no pacote que viola uma restrição de integridade:

DELETE FROM x WHERE x.ID = an_x_with_children;

Meu proc falha com um ORA-02292 nesta linha, como esperado. Eu quero ver o valor doan_x_with_children variável. Então eu envolvo a linha com as saídas assim:

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');

E espere ver a mensagem como a última coisa no console de mensagens antes da mensagem de erro de restrição de integridade violada.Mas isso não imprime!

Agora, se eu mudar a saída para usar oput_line() procedimento como este:

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');

Eu vejo a mensagem "Tentativa de excluir x: 123" imediatamente antes do proc erros.

odocs para odbms_output pacote não menciona oput eput_line procedimentos se comportando de maneira diferente a esse respeito. Por exemplo, diz

A saída que você cria usando PUT ou PUT_LINE é armazenada em buffer.

Então, eu esperaria que ambos ou nenhum para mostrar a saída quando os erros proc.

Alguém pode explicar o que está acontecendo com esse comportamento para mim?

questionAnswers(1)

yourAnswerToTheQuestion