[Oracle] SQL PLus Formatierte Ausgabe

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Ein Kollege von mir würde gerne wissen, ob bzw. wen ja wie an mit SQL Plus folgendes realisieren könnte:

kurze frage zu SQL Plus:
Wie kann ich bei einer Abfrage das Ergebnis so formatieren, dass die Feldnamen nicht horizontal sondern vertikal ausgegeben werden?
Beispiel:

Normale Ausgabe:
Name Vorname
Mustermann Hans

Gewünschte Ausgabe:
Name Mustermann
Vorname Hans

was jemand was dazu?

Gruß Tom
 
Hallo!

Hab's jetzt selbst hinbekommen...

SQL> create table person(name varchar(32), vorname varchar(32));

Tabelle wurde angelegt.

SQL> insert into person values('Mustermann','Hans');

1 Zeile wurde erstellt.

SQL> insert into person values('Darimont','Thomas');

1 Zeile wurde erstellt.

SQL> commit;

SQL> select * from person;
Code:
NAME                             VORNAME
-------------------------------- --------------------------------
Mustermann                       Hans
Darimont                         Thomas

Datei namens ora_report.sql mit folgendem Inhalt erstellen und unter c:\ ablegen:

Code:
COLUMN NAME NOPRINT NEW_VALUE NAME_VAR;
COLUMN VORNAME NOPRINT NEW_VALUE VORNAME_VAR;
TTITLE 'Personenliste' SKIP 1 -
LEFT 'Name:    ' NAME_VAR SKIP 1 -
LEFT 'Vorname: ' VORNAME_VAR
BREAK ON VORNAME SKIP PAGE;
SELECT NAME, VORNAME FROM PERSON;

Aufrufen kann man die Datei dann von SQLPlus aus mit:
@c:\ora_report;

Ausgabe:
Code:
SQL> @c:\ora_report;

Personenliste
Name:    Mustermann
Vorname: Hans



Personenliste
Name:    Darimont
Vorname: Thomas


Leider habe ich den kleinen Schönheitsfehler (der Titel wird bei jeder Zeile mitausgegeben) noch nicht
beheben können, aber vielleicht hat ja jemand von euch noch einen Tipp auf Lager ;-)

Gruß Tom
 
Ein Tip wäre ein annonymer PL/SQL Block

Code:
SET SERVEROUTPUT ON
SET ECHO OFF
SET FEEDBACK OFF
PROMPT Personenliste
PROMPT ==============
DECLARE
	CURSOR c1 IS
		SELECT * FROM person;
	pers person%ROWTYPE;
BEGIN
	OPEN c1;
	LOOP
		
		FETCH c1 INTO pers;
		EXIT WHEN c1%NOTFOUND;
		
		DBMS_OUTPUT.put_line('Name    : ' || pers.NAME );
		DBMS_OUTPUT.put_line('Vorname : ' || pers.VORNAME );
		DBMS_OUTPUT.put_line( '_'  );
		
	END LOOP;
	CLOSE c1;
END;
/

Ausgabe:
Code:
SQL> @test
Personenliste
==============
Name    : Mustermann
Vorname : Hans
_
Name    : Darimont
Vorname : Thomas
 
Hallo!

Diese Lösung ist natürlich im Ergebnis (wie nicht anders zu erwarten optimal). Jedoch sollte das ganze mit den Reporting Fähigkeiten von PL/SQL gelöst werden, aber so geht's jetzt auch ;-)

Gruß Tom
 

Neue Beiträge

Zurück