Export von Oracle in Excel oder CSV-Format

Hallo,
kann jemand mit sagen, wie ich ein Ergebnist einer Select-Anweisung in Oracle 8i in Excel 2000 oder in eine CSV-Dateil exportieren kann?

Gruß

hi!

es existieren ca. 8 129 293 möglichkeiten, ein ergebnis eines selects in ein csv-file zu bringen:

a) ergebnis in file spoolen
b) aus sql-plus copy-paste nach excel (mühsam, noch richtiges "hand"werk)
c) per oracle reports einen output auf csv erstellen
d) per utl_file oder text_io ein file erstellen
e) per discoverer output auf csv
f) per impromptu output auf csv
g) per xxx output auf csv
h) …

grüße,
tomh

Hi,
vielen Dank für Deine Antwort. Ich hatte mit utl_file versucht, klappte aber nicht. Bekomme eine Fehlermeldung, daß das von mir etstellte Verzeichnis nicht existiert?? Das Programm siehst Du auch unten.
Das Verzeichnis c:\export habe ich selbst angelegt.
Ich arbeite mit Oracle 8.1.7 und prgrammiere unter forms-developer vers. 4.5.
Hast Du eigentlich ein einfaches Beispiel, wie man es macht?
Es gibt in meinem Programm ein Button, der mit dem Trigger „When Button pressed“ anstoßen werden muß. Dieser Trigger soll eine Selection durchführen und das Ergebnis in eine CSV-Datei (mit „;“ als Trennzeichen) oder Excel-Tabelle schreiben.

Gruß

Rezaei
*******************
PROCEDURE EXPORT_CIT
IS
F UTL_FILE.FILE_TYPE; /* Filehandle */
CURSOR C1 IS SELECT MTG_PK FROM TB_MITGLIEDER; /* Query */
C1VAR C1%ROWTYPE; /* Datensatzrecord */
UTL_EXPORT_AFA_ERROR EXCEPTION;
BEGIN
/* Datei öffnen */

F := UTL_FILE.FOPEN ( ‚C:\EXPORT‘ , ‚EXPORT.ASC‘ , ‚W‘ );
/* Query öffnen */
OPEN C1;
LOOP
/* Datensatz lesen */
FETCH C1 INTO C1VAR;
EXIT WHEN C1%NOTFOUND;

/* Zeile schreiben */
UTL_FILE.PUT_LINE ( F , C1Var.MTG_PK||’;’||C1Var.MTG_PK );
END LOOP;
/* Query schliessen '/
CLOSE C1;
/* ASCII-Datei schliessen */
UTL_FILE.FCLOSE ( F );
/* Fehlerhandling */

EXCEPTION
WHEN UTL_FILE.INVALID_FILEHANDLE
THEN DBMS_OUTPUT.PUT_LINE ( ‚FILEHANDLE NICHT GÜLTIG‘ );
RAISE UTL_EXPORT_AFA_ERROR;
WHEN UTL_FILE.INVALID_PATH
THEN DBMS_OUTPUT.PUT_LINE ( ‚VERZEICHNIS UNGÜLTIG ODER NICHT VERFÜGBAR‘);
RAISE UTL_EXPORT_AFA_ERROR;
WHEN UTL_FILE.INVALID_MODE
THEN DBMS_OUTPUT.PUT_LINE ( ‚DATEI IM FALSCHEN MODUS GEÖFFNET‘ );
RAISE UTL_EXPORT_AFA_ERROR;
WHEN UTL_FILE.INVALID_OPERATION
THEN DBMS_OUTPUT.PUT_LINE ( ‚UNGÜLTIGE OPERATION MIT DATEI‘ );
RAISE UTL_EXPORT_AFA_ERROR;
WHEN UTL_FILE.WRITE_ERROR
THEN DBMS_OUTPUT.PUT_LINE ( ‚SCHREIBVERSUCH IN DATEI GESCHEITERT‘ );
RAISE UTL_EXPORT_AFA_ERROR;
WHEN OTHERS
THEN DBMS_OUTPUT.PUT_LINE ( ‚FEHLER während des Exports‘ );
RAISE UTL_EXPORT_AFA_ERROR;

END;
*****************

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi!

steht im init.ora-file auch ein „utl_file_dir = *“? und die berechtigungen auf das verzeichnis sind auch gesetzt?

wenn du schon in forms entwickelst, warum nicht mit text_io? bzw. wenn du schon den developer hast, warum nicht gleich ein report-aufruf, der das select-stmt. oder zumindest die where-klausel als parameter mitkriegt, und gleich in ein csv-file (delimited-file) schreibt?

grüße,
tomh

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
Vielen Dank für schnelle Antwort. Die Datei „init.ora“ existiert nicht. Meinst Du „C:\Orant\network\admin\tnsname.ora“?
Muß ich dann als Phad eintragen:

utl_file_dir = ‚C:\EXPORT‘, wenn ich das Ergebnis der Select-Anweisung in das Verzeichnis C:\EXPORT ablegen will. Berechtigung für den Zugriff auf Datei?? Ihc habe das Verzeichnis auf dem PC freigegeben, oder was meinst Du genau von Berechtigungen.
Es geht ja darum, daß ich die Daten auf dem PC haben möchte und nicht auf Unix-Rechner.
Danke Dir im Vorraus!

Gruß

Rezaei

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rezaei!

Die Datei „init.ora“
existiert nicht.

Doch, tut sie mit Sicherheit, allerdings auf dem Server, nicht auf dem Client!

Meinst Du
„C:\Orant\network\admin\tnsname.ora“?

Die wiederum liegt auf dem Client. init.ora wird verwendet um der Datenbank beim Start einige (also so ca. 60 Mio. verschiedene :wink:) Parameter mitzuteilen. tnsnames.ora brauchst du, um dich mit dem Server zu verbinden. Die Einträge da drin sind der Datenbank ziemlich egal.

Muß ich dann als Phad eintragen:

utl_file_dir = ‚C:\EXPORT‘, wenn ich das Ergebnis der
Select-Anweisung in das Verzeichnis C:\EXPORT ablegen will.

Wenn es am Server ein Verzeichnis C:\EXPORT gibt, dann ja. Halte ich aber auf einem UNIX-Server doch für recht unwahrscheinlich…
Zur Klarstellung: PL/SQL-Code läuft am Server ab (wenn man die paar Kleinigkeiten, die z.B. Forms am Client erledigt mal nicht berücksichtigt). Pfadangaben beziehen sich daher auch auf das Dateisystem des Servers, nicht auf das des Clients.

Berechtigung für den Zugriff auf Datei?? Ihc habe das
Verzeichnis auf dem PC freigegeben, oder was meinst Du genau
von Berechtigungen.

siehe oben - es geht um Verzeichnisse am Server…

Es geht ja darum, daß ich die Daten auf dem PC haben möchte
und nicht auf Unix-Rechner.
Danke Dir im Vorraus!

Von dort kannst Du sie dir ja kopieren (zumindest von UNIX auf DOS sollte das keine Probleme geben, nur die altbekannte CR/LF Umwandlung muss berücksichtigt werden. FTP z.B. kann das…)

Ansonsten halte ich auch die von Tomh vorgeschlagenen Vorgangsweisen z.B. über Oracle Reports, oder auch (falls vorhanden) Crystal Reports für empfehlenswert.

Liebe Grüße,
TheBeast

Hi,
danke für die Antwort. Dann hat man mich falsch verstanden. Es solen die Daten in eine Datei auf Client (PC) abgespeichert werden. Mit FTP kopieren kenne ich auch, aber das soll ein Anwender machen, der auf Unix-Rechner keinen Zugang hat. Das heiß, er startet ein Programm und bekommt direkt eine Datei auf seien PC und zwar auf seinen C-Laufwerk. Dann macht es mit UTL:FILE-Methode kein Sinn. Ich werde schauen, wie man mit Report macht. Bin aber leider ganz am Anfang, wenn er um Report-Erstellung geht und muß ich es sehen, wie das funktioniert. Ich dachte, daß irgend jemnad einfach ein Beispiel hat, wie man das Problem lösen kann.
Also, Oracle aufdem Server und von Clint aus nach der Bestätigung eines Buttons eine ASCII-Datei auf Client-Seite bekommen ohne daß der Anwender sich um Kopieren der Datei vom Server auf Clint kümmern muß.

Gruß

Rezaei

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

nochmals hi!

wie wär’s, wenn du einfach die pl-sql-prozedur in die forms-maske einbaust und statt utl_file das text_io nimmst? damit spricht dann der client seine eigene umgebung an (pfade und so ein zeugs) und das ganze käme ohne db-einspielungen aus …

grüße,
tomh

ps: ich würde wegen des komforts die repot-variante nutzen (man könnte auch sagen: aus faulheit :wink:

pps: reports ist wie forms - nur ohne eingabe und mit noch mehr rätseln …

2 Möglichkeiten, das Ergebnis ins Excel (für den User wohl eher gewünscht als CSV) zu bekommen:

  1. mittels ODBC-Treiber aus der Oracle ziehen (evtl. Umweg über Access nötig)

  2. mit Perl::smiley:BI die Abfrage machen. Kann man entweder als Textdatei in beliebiger Formatierung ausgeben oder aber das Ergebnis an ein weiteres Perl-Modul übergeben, welches daraus eine Excel-Datei macht.

Sollte nicht so schwierig sein :
"
set pages 999
spool ausgabe.csv
select feld1||’;’||feld2||’;’||feld3||’;'feld4
from tabelle;
spool off
"

Die Datei „ausgabe.csv“ einfach in Excel importieren.

cu Frank P

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
kann jemand mit sagen, wie ich ein Ergebnist einer
Select-Anweisung in Oracle 8i in Excel 2000 oder in eine
CSV-Dateil exportieren kann?

Neben den erwähnten gibt es noch einen vierte Möglichkeit, dazu brauchst Du aber ein Tool namens TOAD bzw. SQL-Navigator: Diese bieten die Möglichkeit, das Ergebnis eines Selects als Excel zu speichern.
Nähere Infos unter www.quest.com - es gibt meine ich auch eine zeitlich begrenzte Trialversion der beiden Tools (beide aus dem gleichen Haus). Wenn du viel mit Datenbanken machst, würde ich Dir die Anschaffung dieses Tools empfehlen - gerade für Oracle sehr brauchbar!