Wie wird die Ausgabe von sqlplus in einer Zeile angezeigt?

46

Ich habe eine Tabelle mit 100 Spalten. Wenn Sie Daten in SQL Plusden 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 bashich hinein -

weniger output.txt

Die Ausgabe wird weiterhin umbrochen und ist nicht lesbar.

Kshitiz Sharma
quelle
1
Ich möchte auch, dass die Spalten automatisch erweitert werden, anstatt dass ich die Spaltengröße für jede Spalte einzeln festlegen muss.
Kshitiz Sharma

Antworten:

57

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 lessdann -Sdie Option müssen Sie nach verwenden https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . Unter Unix / Linux können Sie head -1 output.txtdie erste Zeile einer Datei abrufen und so überprüfen, ob dies wie erwartet ist, oder Sie können feststellen od -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 linesizedie Länge der Linie. In den meisten Fällen ist der Maximalwert für linesize32767. Sie können Ihren Maximalwert ermitteln, wenn Sie LINESIZE auf einen ungültigen Wert setzen und die Fehlermeldung überprüfen, SET LINESIZE 0um SP2-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 OFFSchneidet die Zeile ab, wenn sie länger als LINESIZE ist. Dies sollte nicht passieren, wenn die Zeilengröße groß genug ist.
  • SET TERMOUT OFFunterdrü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.
  • Es gibt einige andere SETParameter bezüglich der Ausgabe (NUMWIDTH, NUMFORMAT, LONG, COLSEP) und der Leistung (ARRAYSIZE, LONGCHUNKSIZE).

Sie müssen den COLUMNBefehl verwenden, um einzelne Spalten zu formatieren.

ZB column name format a30wird die Spalte namein 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 ||, z

select emp_id||' '||first_name||' '||last_name
from emp;

Eine 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)

miracle173
quelle
LONGCHUNKSIZEnicht nur um die Leistung ist, scheint es , gebraucht zu werden unerwünschten Zeilenumbruch zu vermeiden , zusätzlich zu LINESIZEexperimentierten nur diese mit unbrauchbar Ausgabe vonDBMS_METADATA.get_ddl()
Daniel Vérité
2
Nette Antwort ...
ypercubeᵀᴹ
2
Was @ YperSillyCubeᵀᴹ sagte :)
Tom V
Sie sollten verwenden SET PAGESIZE 1000statt 0sonst Spalten - Header nicht gedruckt werden, wenn die Ausgabe SELECT“Befehle. Referenz .
Pierre C
@PierreC Deshalb habe ich "SET PAGESIZE 0" geschrieben, um eine unendliche Seitengröße festzulegen und Überschriften, Titel usw. zu vermeiden.
Miracle173
5

Sie müssen Folgendes einstellen:

SET WRAP OFF
Balazs Papp
quelle
3
set linesize 30000 SET WRAP OFFtat den Trick für mich
ren
2

Sie können so einstellen

SET WRAP OFF

SET PAGESIZE 0
DevYudh
quelle