2013-03-18 19 views
8

Einer der Frage, wenn eine lange Anweisung zum Anzeigen verschiedener Spalten zum Beispiel die AusführungOracle Spaltenbreite für alle Spalten

select g.guestid, g.forename, g.surname, b.bookingid, 
b.arrivedate, b.departdate, br.floorno, br.roomno from... 

die Spalte Schlichte auf Linux Terminal scheint ein Problem zu sein. Zum Beispiel nimmt der Vorname VARCHAR (80) Spalte einen Großteil der Breite des Bildschirms, wenn die obige Aussage und eine Möglichkeit, die Ausführung zu schneiden unten durch wäre:

SET COLUMN FORENAME FORMAT A10 

zum Beispiel. Allerdings müssten viele Spalten wiederholt durchlaufen werden, was ziemlich lang ist. das heißt

SET COLUMN FORENAME FORMAT A10 
SET COLUMN SURNAME FORMAT A10 

und so weiter ...

Gibt es eine Möglichkeit der Spaltenbreite nach Textbreite zu sagen, so anpassen, dass jeder schön in paßt. und mag das nicht ..

enter image description here

Ich würde eine Lösung bevorzugen, die nicht die Verwendung von Funktionen beinhaltet.

+2

Verwenden Sie anstelle von SQLPlus GUI-Tools. Terminal-Fenster eignet sich nicht gut für die Anzeige von Datagrids. –

+0

@EgorSriptunoff: hängt vom Kommandozeilen-Client ab;) SQL * Plus ist wirklich nervig. –

+0

Yeah, Sparks Dataframes werden schön auf dem Terminal angezeigt. – alexgbelov

Antwort

-1

Die Sitzung weiß nicht, wie hoch die maximale Länge der zurückgegebenen Zeichenfolgen sein soll, bis die Abfrage ausgeführt wurde. Die Spalte sollte natürlich entsprechend groß sein, aber vielleicht bekommen Sie wirklich eine Liste von Vornamen, die 80 Zeichen lang ist - wenn nicht, dann ist Ihre Datentyplänge zu groß.

Wie Eric sagt, GUI-Tools sind besser, und Oracle SQL Developer ist kostenlos und gut.

1

Nein, es gibt keine einfache Möglichkeit, die Spaltenbreite von SQL * Plus automatisch auf die Textbreite anzupassen.

Scripting kann Ihnen jedoch das Leben erleichtern.

Zunächst, reduzieren Sie die Eingabe. Tun Sie nicht SET COLUMN FORENAME FORMAT A10, tun Sie etwas wie @c forename 10 statt.

17:33:31 [email protected]> cl col 
columns cleared 
17:33:33 [email protected]> select * from dual; 

D 
- 
X 

Elapsed: 00:00:00.01 
17:33:37 [email protected]> @c dummy 10 
17:33:43 [email protected]> select * from dual; 

DUMMY 
---------- 
X 

Elapsed: 00:00:00.01 
17:33:45 [email protected]> get s:\c.sql 
    1* col &1. for a&2. 
17:33:50 [email protected]> 

Oder schnell breite Spalten wie folgt versteckt:

17:48:44 [email protected]> select owner, table_name from all_tables where rownum = 1; 

OWNER       TABLE_NAME 
------------------------------ ------------------------------ 
SYS       CON$ 

Elapsed: 00:00:00.24 
17:48:49 [email protected]> @np owner 
17:48:53 [email protected]> select owner, table_name from all_tables where rownum = 1; 

TABLE_NAME 
------------------------------ 
CON$ 

Elapsed: 00:00:00.26 
17:48:56 [email protected]> get s:\np 
    1 col &1 noprint 
    2* @undef 

Dies sind nur zwei von vielen Skripten ich auf einer täglichen Basis zu verwenden. Dieser Ansatz braucht Zeit und persönliche Anpassung, um sich daran zu gewöhnen und effektiv zu machen, reduziert aber die Anzahl der Tasten, die Sie dramatisch drücken.

Zweitens gibt es glogin.sql. Es ist ein Skript, das jedes Mal ausgeführt wird, wenn Sie eine Verbindung herstellen. Ich nehme an, Sie kennen eine Liste von "langen" Spalten, die Ihre Zeilen umbrechen lassen.

sie einfach dort auflisten und Ihre

SET COLUMN FORENAME FORMAT A10 
SET COLUMN SURNAME FORMAT A10 

Spalte Parameter würden jedes Mal eingestellt werden Sie (wieder) anschließen.

0

Tom Kyte hat eine print_table procedure geschrieben, die das Ergebnis in einer vertikalen Weise anzeigt.

Zum Beispiel:

SQL> exec print_table('select g.guestid, g.forename, ... from ...') 
GUESTID      : 210 
FORENAME      : DINGLE 
... 
etc... 
.... 
----------------- 

PL/SQL procedure successfully completed. 

Dieses Verfahren ist praktisch, vor allem, wenn die Ergebnismenge klein ist, im Idealfall nicht mehr als vielleicht 10 Zeilen.

-1

Das ansiconsole SQL-Format kann das sein, wonach Sie suchen.

set sqlformat ansiconsole; 
select g.guestid, g.forename, g.surname, b.bookingid, 
    b.arrivedate, b.departdate, br.floorno, br.roomno from... 

Oder:

select /*ansiconsole*/ g.guestid, g.forename, g.surname, b.bookingid, 
    b.arrivedate, b.departdate, br.floorno, br.roomno from... 

Dieses Format Auto-Größen Spalten auf der Größe der Abfrageergebnisse basieren.

+0

das ist nicht sqlplus, sondern SQLcl – miracle173

0

Wie bereits von anderen Benutzern erwähnt, gibt es für sqlplus keine einfache Lösung. Vielleicht hilft es, die glogin.sql oder login.sql Datei zu verwenden (@ René Nyffenegger zur Verfügung gestellt article about those files). Sie können Spaltendefinitionen in diese Dateien einfügen. Wenn Sie immer dieselben Abfragen abfragen oder wenn Sie eine konsistente Benennung Ihrer Spalten haben, kann dies hilfreich sein.

Oder Sie setzen die Spalten Anweisungen in einem Skript, das Sie von

@scriptname.sql 

aufrufen, wenn Sie die Spaltenformat verwenden möchten. Sie legen das Skript in ein Verzeichnis, das Teil der SQLPATH variable ist, so dass es aus einem beliebigen Verzeichnis aufgerufen werden kann.

Oder Sie verwenden ein anderes Werkzeug. Ein Benutzer hat bereits auf SQLcl hingewiesen.