Voici un exemple qui illustre le comportement que vous constatez :
SQL> exec dbms_output.put_line('hello')
hello
PL/SQL procedure successfully completed.
SQL> exec dbms_output.put('hello again')
PL/SQL procedure successfully completed.
SQL> exec dbms_output.put(' and again')
PL/SQL procedure successfully completed.
SQL> exec dbms_output.new_line
hello again and again
PL/SQL procedure successfully completed.
La documentation dit "SQL*Plus appelle GET_LINES après avoir émis une instruction SQL ou des appels PL/SQL anonymes."
Et la procédure GET_LINES dit "Cette procédure récupère un tableau de lignes du tampon."
Avec PUT, vous n'avez pas encore terminé votre ligne. Et donc ça ne s'imprime pas.
La procédure NEW_LINE le mentionne également :"Cette procédure place un marqueur de fin de ligne. La procédure GET_LINE et la procédure GET_LINES renvoient des "lignes" délimitées par des "nouvelles lignes". Chaque appel à la procédure PUT_LINE ou à la procédure NEW_LINE génère une ligne. renvoyé par GET_LINE(S)."
Cordialement,
Rob.