Thema: Oracle Result (sqlplus-tool) - voller spaces

Hallo liebe Forumgemeinde,
ich habe ein Problem mit sqlplus.
Ich hole ca. 40.000 Datensätze aus einer Oracle-Datenbank und lass die in ein csv-file schreiben.
Das mach ich mit Hilfe eines Shell-scripts und sqlplus per cronjob auf einer HP UX Maschine.
Nun zu meiner Frage,
gibt es die Möglichkeit aus dem Output:

COMP_ID                                 |FIRMA                         |GRUND                                                                                          |usw.
----------------------------------------|------------------------------|------------------------------|usw.
BLA1                                          |BLA2                              |BLA3 BLA4 BLA5        |usw.       


So einen Output zu machen:
COMP_ID|FIRMA|GRUND
BLA1|BLA2|BLA3

Also alle Leerzeichen rausschmeißen? LTRIM(RTRIM(FIRMA)) klappt nicht.
Die Zeile mit den "-----" kann ruhig stehen bleiben. Ich möchte nur alle Leerzeichen weg haben.Aber nur die hinter BLA5 - und nicht zwischen BLA3, BLA4 zum Beispiel. Also einfach ALLE Leerzeichen wegstreichen geht nicht.
Wenn ich die Daten mit TOAD aus der Datenbank ziehe und abspeicher, sind sie in dem Format wie oben beschrieben mit:
COMP_ID|FIRMA|usw.

Ich hoffe, dass ihr mir helfen könnt!

2

Re: Oracle Result (sqlplus-tool) - voller spaces

Hi und willkommen auf Devshare smile

Wenn ich eine Tabelle bei SQL*Plus als "CSV" schreiben will, mache ich das normalerweise so:

SQL> set lines 2000
SQL> set heading off
SQL> set trimspool on
SQL> set pages 20000
SQL> set feedback off
SQL> spool /tmp/my_table_as_csv.csv
SQL> select spalte1||';'||spalte2||';'||spalte3 from tabelle;
SQL> spool off

und schon habe ich in der Datei /tmp/my_table_as_csv.csv mein CSV.

HTH,

tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

3

Re: Oracle Result (sqlplus-tool) - voller spaces

Mahlzeit!

Vielen Dank!
Das scheint schon sehr gut zu klappen bzw. ich bastel mir das so hin, wie ich es brauche. Das hat mir schonmal sehr geholfen!

Habe noch eine weitere Frage. Wie kann ich denn jetzt folgendes nutzen?
SELECT foo AS Geraetebezeichnung FROM Tabelle
Einfach ||'foo as Geraetebezeichnung'||'|'||... klappt nicht. (Ich brauch "|" als Delimiter, da manche Texte eine ";" enthalten und das Reimportieren der Daten sonst schiefgeht.)
Wie nutze ich also diese "Aliase" mit SQL*Plus?

Vielen Dank schon einmal!

cixx.

4

Re: Oracle Result (sqlplus-tool) - voller spaces

Hoi cixx,

Aliase in SQL*Plus sind bei dieser Art "spalte1||'|'||spalte2||'|'||spalte.." unnütz, da der Alias nur im Heading verwendet wird und eben dieses Heading mit
SQL> set heading off
deaktiviert wurde.
Die Spaltennamen tauchen also nicht auf.
Wenn Du wirklich sowas machen willst (= den Spalten andere Namen geben oder eine HeaderZeile einfügen), kannst Du das auch mit:
SELECT 'Geraetebezeichnung|Spalte2|Spalte3|Spalte...' FROM dual;
machen und danach Deinen CSV-Select.

Zugegeben, das sieht ein wenig umständlich aus, aber mit reinem SQL*Plus fällt mir keine andere Möglichkeit ein.
Alternativ kann ich Dir noch ein PERL-Skript schicken, welches eine gegebene Tabelle komplett als CSV exportiert. (mit Spaltenüberschriften)


Schönen Gruß,
tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

5

Re: Oracle Result (sqlplus-tool) - voller spaces

Moin moin aus Hamburg,

naja, bevor ich großartig im Script herumbastel, was ja nicht ständig geändert werden soll, da löse ich das doch lieber an der Stelle, wo es importiert wird. Es wird in Excel importiert und da kann man ja einfach Spaltennamen neu vergeben etc. - das ist ja nicht so schwer. Und da eh schon ein Makro nach dem anderen drüberläuft... wink
Vielen Dank auf jeden Fall bis hier her, Du hast mir sehr geholfen! smile

Gruß,
cixx.

Zuletzt bearbeitet von cixx (05-10-2006 09:04:51)

6

Re: Oracle Result (sqlplus-tool) - voller spaces

N'Abend,
ein neues Problem.
Wie kann ich innerhalb eines Strings (varchar2(2000)) Zeilenumbrüche entfernen mit Hilfe von SQL-Boardmitteln?

Gruß,
cixx.

Zuletzt bearbeitet von cixx (05-10-2006 17:18:42)

7

Re: Oracle Result (sqlplus-tool) - voller spaces

N´abend smile

ganz einfach:

SQL>select replace(replace(spalte,chr(10),''),chr(13),'') from tabelle
.... 2 mal den REPLACE, weil chr(10) und chr(13) jeweils Windoof und *nix-Umbrüche sind, wenn ich mich recht erinnere...

HTH,

tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

8

Re: Oracle Result (sqlplus-tool) - voller spaces

Guten Morgen,

vielen Dank, das klappt. CHR(10) genügt.
Blöd ist jetzt nur noch, dass in der csv-Datei noch der gesamte Oracle SQL> Kram drin steht.
Und leider kann Excel kein UNIX-Format bearbeiten, das muss also noch irgendwie konvertiert werden oder so.


MfG,
cixx.

9

Re: Oracle Result (sqlplus-tool) - voller spaces

Moin smile

Das Einzige, was da in der CSV Datei noch drin sein sollte, ist der Select-Befehl an sich.
Wenn Du da noch das ganze "SET"-Zeugsl drin hast, musst Du Dein SPOOL später starten wink

Und was meinst Du mit "Unix-Format"? Was muss da noch konvertiert werden?

Schönen Gruß,

tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

10

Re: Oracle Result (sqlplus-tool) - voller spaces

Hi,
das csv-file benenne ich in ein Textfile um, dass Excel dann bearbeitet. Aber Excel bzw. viel mehr VBA kann mit dem UNIX-Format das files nicht umgehen (UNIX-Zeilenumbrüche nach einer Zeile des Results etc.) - der ballert alles direkt hintereinander in eine Zeile.
Wenn ich es mit UltraEdit dann von UNIX->DOS konvertiere, klappt alles wunderbar.
Wenn man irgendwie das Ausgabeformat von UNIX auf DOS stellen könnte in/bei SQL*Plus - dann wäre ich mehr als zufrieden. wink

Gruß,
cixx.

11

Re: Oracle Result (sqlplus-tool) - voller spaces

Moin,

na ja, ne kleine Idee wäre:
select chr(10) am Ende der Zeile zu machen wink

Schönen Gruß,

tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

12

Re: Oracle Result (sqlplus-tool) - voller spaces

Moin,
da der SQL*PLus-Output eh direkt zu gzip gepiped wird, habe ich einfach noch awk dazwischengeklemmt:
awk 'sub("$", "\r")'

Aber wie das nunmal so ist, jetzt habe ich am Anfang der entgültigen Datei ein ^L - wo ich nicht weiß, wo es herkommt, an awk liegt das nicht, das setzt ja kein ^L bzw. CHR(12) sondern CH(13)...

Habe ich selbst lösen können, mit Hilfe eines Mitarbeiters, das lag an "SET NEWPAGE 0" - Mit SET NEWPAGE NONE sollte das jetzt aber laufen. smile

Zuletzt bearbeitet von cixx (06-10-2006 15:49:01)

13

Re: Oracle Result (sqlplus-tool) - voller spaces

hallo, ich bin neu hier und darf mich seit ca zwei wochen mit einer oracle datenbank beschäftigen.

ich soll daten aus eben so einer datenbank in eine xml datei schreiben.
das gleiche soll auch noch in csv machbar sein, ich habe nur keine ahnung wie man das anstellen soll bzw. was man alles braucht dafür.

gruß