¿Se dbms_output.put () se almacena en búfer de forma diferente a dbms_output.put_line ()?

Estoy usando Aqua Data Studio para depurar un proceso almacenado al dispersar las declaraciones de salida a lo largo.

Tengo una declaración de eliminación en el paquete que viola una restricción de integridad:

DELETE FROM x WHERE x.ID = an_x_with_children;

Mi proc falla con un ORA-02292 en esta línea, como se esperaba. Quiero ver el valor de laan_x_with_children variable. Así que envuelvo la línea con salidas así:

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

Y espere ver el mensaje como la última cosa en la consola de mensajes antes de que la restricción de integridad haya violado el mensaje de error.¡Pero no se imprime!

Ahora si cambio la salida para usar elput_line() procedimiento 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');

Veo el mensaje "Intentando eliminar x: 123" inmediatamente antes de que salgan los errores de proc.

losdocs Para eldbms_output el paquete no menciona elput yput_line Los procedimientos se comportan de manera diferente a este respecto. Por ejemplo, dice

La salida que crea utilizando PUT o PUT_LINE está en búfer.

Por lo tanto, esperaría que ambos o ninguno mostraran el resultado cuando los errores de proc.

¿Alguien me puede explicar qué está pasando con este comportamiento?

Respuestas a la pregunta(1)

Su respuesta a la pregunta