Ecco un esempio che mostra il comportamento che stai vedendo:
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 documentazione dice "SQL*Plus chiama GET_LINES dopo aver emesso un'istruzione SQL o chiamate PL/SQL anonime."
E la procedura GET_LINES dice "Questa procedura recupera un array di righe dal buffer."
Con PUT non hai ancora completato la tua linea. E quindi non stampa.
La procedura NEW_LINE menziona anche questo:"Questa procedura inserisce un indicatore di fine riga. La procedura GET_LINE e la procedura GET_LINES restituiscono "righe" come delimitate da "nuove righe". Ogni chiamata alla procedura PUT_LINE o alla procedura NEW_LINE genera una riga che viene restituito da GET_LINE(S)."
Saluti,
Rob.