Oracle PL/SQL dbms_output.put_line() vs dbms_output.put()
Ich habe eine triviale Frage, die ich noch nicht verstehen den Unterschied zwischen dbms_output.put_line() und dbms_output.put()
set serveroutput on size 200000
Begin
dbms_output.put_line('A' || CHR(10) || 'B');
End;
/
exec dbms_output.put_line('A' || CHR(10) || 'B');
Den oben genannten Ausgabe gibt Eine und B in zwei verschiedenen Linien. Aber
exec dbms_output.put('A')
exec dbms_output.put('B')
exec dbms_output.new_line
druckt nichts. Ich bin mit SQL*Plus: Release 11.2.0.1.0 Production
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie immer schreiben, die vollen Linien in den PL/SQL block. Wehn Sie schreiben
Schreiben Sie zwei vollständige Zeilen "A" und "B" in einem PL/SQL block. Wenn Sie schreiben
das gleiche gilt.
Aber wenn Sie schreiben
haben Sie drei separaten PL/SQL-blocks. Die ersten beiden schreiben, die teilweise Zeilen, die übersprungen werden, indem SqlPlus. Der Dritte block schreibt eine vollständige, aber leere Zeile.
Wenn Sie schreiben,
funktioniert alles wie erwartet.
Der Grund dafür ist, wie die Konsolen-Ausgabe in SqlPlus funktioniert: PL/SQL-schreibt die Ausgabe in einen Zwischenpuffer. SqlPlus holt sich die Inhalte dieser Puffer am Ende jeder ausgeführten PL/SQL-block. Es druckt den Inhalt auf der Konsole, während nur drucken volle Linien. Daher springt die Letzte Zeile in den Puffer, wenn es nicht terminiert ist, durch eine neue-Zeile-Zeichen.
Technisch vermute ich, SqlPlus, um auch Linien drucken, ohne dass eine neue-Zeile-Zeichen, aber starightaway überschreiben Sie im nächsten Schritt.Technisch SqlPlus in der Tat holt sich nur ganze Zeilen aus der internen Puffer, mit demDBMS_OUTPUT.GET_LINES
PL/SQL-Funktion.Vorausgesetzt, Sie sind auf 11g, sollten Sie erwägen, SETZEN Sie Verfahren, da es Veraltete und nicht mehr unterstützte Oracle. In früheren Versionen, mit STELLEN, die Linie ist noch nicht abgeschlossen. Da Sie nicht die end-of-line-marker im Gegensatz zu PUT_LINE die automatisch gefolgt von einem end-of-line-marker.
So, wenn Sie fügen Sie eine end-of-line-marker, erhalten Sie die Ausgabe.
Können Sie einen Blick auf diese alte Frage Ist dbms_output.put() gepuffert werden, anders als dbms_output.put_line()?
PUT
Verfahren, das dauert einNUMBER
ist veraltet", nicht die version der OP verwendet. Das gleiche gilt fürPUT_LINE
.