Frage So können Sie Tabellendaten in Oracle sqlplus übersichtlicher anzeigen


Ich möchte in der Lage sein, die resultierenden Daten von einer Auswahl auf eine schöne Weise anzuzeigen, nicht alle Spalten unter anderen.

So zeigt sqlplus meine Tabellendaten an:

enter image description here

Aber ich möchte sie zeigen als:

Name   |    Address    |    Phone    |
-------+---------------+-------------+
name1  |    address1   |    phone1   |
name2  |    address2   |    phone2   |
name3  |    address3   |    phone3   |

Nicht jede Spalte unter der anderen


22
2018-06-09 13:50


Ursprung


Antworten:


Ich beginne normalerweise mit etwas wie:

set lines 256
set trimout on
set tab off

Schau es dir an help set wenn Sie die Hilfeinformationen installiert haben. Und dann select name,address eher, als select * wenn du wirklich nur diese zwei Spalten willst.


47
2018-06-09 13:59



Wenn Sie meinen, dass Sie sie so sehen wollen:

WORKPLACEID NAME       ADDRESS        TELEPHONE
----------- ---------- -------------- ---------
          1 HSBC       Nugegoda Road      43434
          2 HNB Bank   Colombo Road      223423

dann können Sie in SQL Plus die Spaltenbreiten wie folgt einstellen (zum Beispiel):

column name format a10
column address format a20
column telephone format 999999999

Sie können die Zeilengröße und die Seitengröße bei Bedarf auch wie folgt angeben:

set linesize 100 pagesize 50

Sie tun dies, indem Sie diese Befehle in SQL Plus eingeben, bevor Sie die Abfrage ausführen. Oder Sie können diese Befehle und die Abfrage in eine Skriptdatei z. myscript.sql und führen Sie das aus. Beispielsweise:

column name format a10
column address format a20
column telephone format 999999999

select name, address, telephone
from mytable;

39
2018-06-09 14:04



Falls Sie einen Dump mit sqlplus gemacht haben und die Ausgabe verstümmelt ist, weil jemand diese 3 Werte nicht vorher gesetzt hat, gibt es einen Ausweg.

Vor ein paar Stunden schickte mir der DB-Administrator die hässlich aussehende Ausgabe der Abfrage, die in sqlplus ausgeführt wurde (ich weiß nicht, vielleicht hasst er mich ...). Ich musste einen Ausweg finden: Dies ist ein awk-Skript, um diese Ausgabe zu analysieren, um sie lesbarer zu machen. Es ist bei weitem nicht perfekt, aber ich hatte nicht genug Zeit, es richtig zu polieren. Wie auch immer, es macht den Job ganz gut.

awk ' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"\n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)}                         BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""}                                 { addLn();  if(!isLoaded()){next}; l=1;             if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}}   }END{if(val!="")print val}'

Falls jemand anderes versuchen möchte, dieses Skript zu verbessern, sind unten die Variablen: hnames - Spaltennamen in der Kopfzeile, hdash - unter der Kopfzeile gestrichelt, h - ob ich gerade Header analysiere (dann == 1), val - die Daten, _d - - um zwischen hnames und hdash zu wechseln, ln0 - letzte Zeile gelesen, ln1 - Zeile vorher gelesen (es ist die, mit der ich eigentlich arbeite), ln2 - Zeile vor ln1 gelesen

Viel Spaß beim Parsen!

Oh, fast vergessen ... Ich nutze dies, um die sqlplus-Ausgabe selbst zu verschönern:

[oracle@ora ~]$ cat prettify_sql 
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "

colsep ist optional, aber es lässt die Ausgabe wie sqlite aussehen, was mit Skripten leichter zu analysieren ist.

BEARBEITEN: Eine kleine Vorschau der geparsten und nicht geparsten Ausgabe

A little preview of parsed and non-parsed output


1
2017-08-11 13:24



Sie können die Liniengröße gemäß der Breite des Fensters festlegen und den Zeilenumbruch mit dem folgenden Befehl festlegen.

set linesize 160;
set wrap off;

Ich habe 160 nach meiner Vorliebe verwendet, Sie können es irgendwo dazwischen setzen 100 - 200 und die Einstellung wird nicht Ihre Daten und es wird die Daten richtig angezeigt.


0
2017-07-13 18:41