Ich habe eine Tabelle mit 100 Spalten. Wenn Sie Daten in SQL Plus
den Ausgabeumbrüchen auswählen , ist das Lesen schwierig.
Was ich lieber möchte, ist, dass entweder eine horizontale Bildlaufleiste angezeigt wird oder die Ausgabe irgendwie an gesendet wird less
Ich führe folgende Anweisungen in SQLPlus aus:
SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
Dann renne bash
ich hinein -
weniger output.txt
Die Ausgabe wird weiterhin umbrochen und ist nicht lesbar.
Antworten:
Es reicht nicht aus, sqlplus zu zwingen, keine Zeilen umzubrechen. Es ist auch erforderlich, dem Viewer mitzuteilen, dass Sie zum Anzeigen der Spooldatei keine Zeilen umbrechen möchten. Wenn Ihre Zuschauer ist
less
dann-S
die Option müssen Sie nach verwenden https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . Unter Unix / Linux können Siehead -1 output.txt
die erste Zeile einer Datei abrufen und so überprüfen, ob dies wie erwartet ist, oder Sie können feststellenod -c output.txt|head
, wo die Zeilenumbrüche tatsächlich in Ihrer Ausgabedatei platziert sind.Wenn Sie LONG-Spalten anzeigen und deren Werte Zeilenumbrüche enthalten, werden für diese Spaltenwerte mehrere Zeilen gedruckt, und Sie können dies nicht mit sqlplus-Einstellungen überschreiben.
Die folgenden sqlplus-Befehle können nützlich sein:
SET LINESIZE linesize
die Länge der Linie. In den meisten Fällen ist der Maximalwert fürlinesize
32767. Sie können Ihren Maximalwert ermitteln, wenn Sie LINESIZE auf einen ungültigen Wert setzen und die Fehlermeldung überprüfen,SET LINESIZE 0
umSP2-0267: linesize option 0 out of range (1 through 32767)
(1) zu erhalten.SET TRIMSPOOL ON
Andernfalls wird jede Zeile in der Spooldatei mit Leerzeichen gefüllt, bis die Zeilengröße erreicht ist.SET TRIMOUT ON
Andernfalls wird jede Zeile in der Ausgabe mit Leerzeichen gefüllt, bis die Zeilengröße erreicht ist.SET WRAP OFF
Schneidet die Zeile ab, wenn sie länger als LINESIZE ist. Dies sollte nicht passieren, wenn die Zeilengröße groß genug ist.SET TERMOUT OFF
unterdrückt das Drucken der Ergebnisse zur Ausgabe. Die Zeilen werden weiterhin in die Spooldatei geschrieben. Dies kann die Ausführungszeit einer Anweisung erheblich beschleunigen.SET PAGESIZE 0
um eine unendliche Seitengröße festzulegen und Überschriften, Titel usw. zu vermeiden.SET
Parameter bezüglich der Ausgabe (NUMWIDTH, NUMFORMAT, LONG, COLSEP) und der Leistung (ARRAYSIZE, LONGCHUNKSIZE).Sie müssen den
COLUMN
Befehl verwenden, um einzelne Spalten zu formatieren.ZB
column name format a30
wird die Spaltename
in der Ausgabe auf eine maximale Länge von 30 Zeichen formatiert .Wenn Sie möchten, dass die Anzeigegröße nicht fest ist, sondern der Größe des tatsächlichen Werts einer Spalte in einer Zeile entspricht, besteht die einzige mir bekannte Möglichkeit darin, die select-Klausel Ihrer Anweisung zu ändern, um das gewünschte Ergebnis zu erhalten und zu verwenden der String-Verkettungsoperator
||
, zEine vollständige Beschreibung aller Variablen finden Sie im SQL * Plus-Benutzerhandbuch und in der Referenz .
Wenn Sie einige Einstellungen (oder COLUMN-Definitionen) wiederverwenden möchten, können Sie sie in einer Datei speichern und diese Datei ausführen, wenn Sie sie erneut benötigen. Sie können diese Datei sogar automatisch ausführen, wenn Sie sqlplus starten.
(1) So ermitteln Sie den Maximalwert für LINESIZE (systemabhängig) (Doc ID 1547262.1)
quelle
LONGCHUNKSIZE
nicht nur um die Leistung ist, scheint es , gebraucht zu werden unerwünschten Zeilenumbruch zu vermeiden , zusätzlich zuLINESIZE
experimentierten nur diese mit unbrauchbar Ausgabe vonDBMS_METADATA.get_ddl()
SET PAGESIZE 1000
statt0
sonst Spalten - Header nicht gedruckt werden, wenn die Ausgabe SELECT“Befehle. Referenz .Sie müssen Folgendes einstellen:
quelle
set linesize 30000
SET WRAP OFF
tat den Trick für michSie können so einstellen
quelle