Wie exportiere ich das Abfrageergebnis in Oracle SQL Developer nach CSV?

240

Ich verwende Oracle SQL Developer 3.0. Es wird versucht herauszufinden, wie ein Abfrageergebnis in eine Textdatei (vorzugsweise CSV) exportiert wird. Wenn ich mit der rechten Maustaste auf das Fenster mit den Abfrageergebnissen klicke, habe ich keine Exportoptionen.

Ken Liu
quelle

Antworten:

375

Version, die ich benutze

Alt-Text

Update 5. Mai 2012

Jeff Smith hat gebloggt gezeigt, was meiner Meinung nach die überlegene Methode ist, um CSV-Ausgabe von SQL Developer zu erhalten. Jeffs Methode wird unten als Methode 1 gezeigt:

Methode 1

Fügen Sie den Kommentar /*csv*/zu Ihrer SQL-Abfrage hinzu und führen Sie die Abfrage als Skript aus (mit F5 oder der zweiten Ausführungsschaltfläche in der Arbeitsblattsymbolleiste).

Geben Sie hier die Bildbeschreibung ein

Das ist es.

Methode 2

Führen Sie eine Abfrage aus

Alt-Text

Klicken Sie mit der rechten Maustaste und wählen Sie Entladen.

Aktualisieren. In SQL Developer Version 3.0.04 wurde das Entladen für den Export geändert. Vielen Dank an Janis Peisenieks für diesen Hinweis

Alt-Text

Überarbeiteter Screenshot für SQL Developer Version 3.0.04

Geben Sie hier die Bildbeschreibung ein

Wählen Sie in der Dropdown-Liste Format die Option CSV aus

Alt-Text

Befolgen Sie die restlichen Anweisungen auf dem Bildschirm.

Ian Carpenter
quelle
25
+1. Der Begriff "Entladen" erscheint mir nicht intuitiv. Einige Daten zu "laden" bedeutet, sie in die Datenbank einzufügen. Daher sollte "Entladen" bedeuten, dass die Daten gelöscht werden ...
Jeffrey Kemp
8
In Version 3.0.04 wurde diese Option in Export umbenannt.
Janis Peisenieks
2
Toll. ps Großbuchstaben haben bei /*CSV*/mir nicht funktioniert, Kleinbuchstaben /*csv*/jedoch. Vielen Dank!
Eran Medan
3
Beachten Sie auch, dass Methode 2 auf einen Fehler stoßen kann (der in meiner Version 3.0.04 immer noch vorhanden ist), bei dem sie nur mit einer großen Zeilenanzahl (ca. 3 KB Zeilen) hängt. Ich verwende dieses SQLPLUS der alten Schule, weil ich Methode 1 oben nicht gesehen habe, aber einige mögen dies vielleicht: {code} SET UNDERLINE OFF SET COLSEP ',' SET LINES 20000 SEITEN 20000 SET FEEDBACK off - optional SET HEADING off Spool C: \ Export \ EMP.csv - Jetzt die Abfrage SELECT * FROM EMP; Spool OFF
Jim P
1
@topr Verwenden Sie Methode 1, wählen Sie alle aus, kopieren Sie sie und fügen Sie sie in einen Texteditor ein und speichern Sie sie als CSV. Möglicherweise können Sie sogar direkt in Excel einfügen, aber da bin ich mir nicht sicher.
Travis
45

Nicht genau "exportieren", aber Sie können die Zeilen (oder Ctrl- Aum alle auszuwählen) in dem Raster auswählen, das Sie exportieren möchten, und dann mit Ctrl- kopieren C.

Die Standardeinstellung ist durch Tabulatoren getrennt. Sie können dies in Excel oder einen anderen Editor einfügen und die Trennzeichen nach Belieben bearbeiten.

Wenn Sie Ctrl- Shift- Canstelle von Ctrl- verwenden C, kopieren Sie auch die Spaltenüberschriften.

BQ.
quelle
5
Super, ich habe speziell darauf geachtet, wie man Header kopiert. Vielen Dank!
Mischkin
3
Das einzige Problem, wenn Sie viele Zeilen haben, bedeutet dies, dass das gesamte Dataset erneut abgefragt werden muss. Wenn es sich um eine lange laufende Abfrage handelt, bedeutet dies, dass Sie viel auf die erste Seite und dann viel auf alle Seiten warten, nachdem Sie Strg + A gedrückt haben. Mit anderen Worten, großartige Lösung, funktioniert aber nur die meiste Zeit und für relativ schnellere oder kleinere Abfragen.
Eran Medan
Bei langer Zeilenanzahl werden Ihre kopierten Inhalte entfernt! Verwenden Sie dies nicht.
Hash
@ Mark Ich habe das noch nie gesehen. Hat es nur die ersten 50 Zeilen oder so behalten? Wenn ja, gibt es eine separate Präferenz dafür. Es wird nur kopiert, was sich derzeit im Raster befindet. Wenn Sie jedoch zum Ende des Rasters scrollen, ruft SQL Dev automatisch weitere Zeilen ab, sodass ich sehen kann, wie jemand dies als Fehler interpretieren könnte.
BQ.
1
Ich habe versucht, dies für 43.000 Datenzeilen zu tun, und es läuft für immer - Exportoption viel schneller. Dies ist fantastisch, wenn Sie nur wenige Datenzeilen haben.
Izikandrw
28

Zu Ihrer Information, Sie können das auch /*csv*/ durch andere Formate ersetzen, einschließlich /*xml*/und /*html*/. select /*xml*/ * from empwürde beispielsweise ein XML-Dokument mit den Abfrageergebnissen zurückgeben. Ich bin auf diesen Artikel gestoßen, als ich nach einer einfachen Möglichkeit gesucht habe, XML von einer Abfrage zurückzugeben.

Yves Rochon
quelle
4
/ * insert * / ist besonders nützlich.
Jeremyjjbrown
Wohin gehen die Dateien?
Anomalie
Ah, egal, ich habe den Teil "Als Skript ausführen" beschönigt und nicht bemerkt, dass dies anders ist als die übliche Schaltfläche "Ausführen".
Anomalie
4

Zu Ihrer Information, für alle, die auf Probleme stoßen, gibt es einen Fehler beim Export von CSV-Zeitstempeln, an dem ich nur ein paar Stunden gearbeitet habe. Einige Felder, die ich exportieren musste, waren vom Typ Zeitstempel. Es scheint, dass die CSV-Exportoption auch in der aktuellen Version (3.0.04 ab diesem Posting) die Gruppierungssymbole nicht um Zeitstempel setzt. Sehr frustrierend, da Leerzeichen in den Zeitstempeln meinen Import unterbrochen haben. Die beste Lösung, die ich gefunden habe, war, meine Abfrage mit einem TO_CHAR () auf alle meine Zeitstempel zu schreiben, was die korrekte Ausgabe ergibt, wenn auch mit etwas mehr Arbeit. Ich hoffe, das spart jemandem etwas Zeit oder bringt Oracle mit seiner nächsten Veröffentlichung auf den Ball.

BoeroBoy
quelle
1
Meine Version 3.0.04 hat immer noch einen Fehler, bei dem sie nur bei größeren Exporten hängt (meine sind 3K-Zeilen). Meine einfache Lösung bestand darin, stattdessen SQLPLUS zu verwenden:
Jim P
In meinem Fall wurde der räumliche Datentyp ( docs.oracle.com/cd/B19306_01/appdev.102/b14255/… ) wie folgt exportiert (beachten Sie die Kommas), MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-122.39096,37.79251,NULL),NULL,NULL)ohne in Anführungszeichen gesetzt zu werden. Und ich verwende dynamisches SQL, damit ich diese Spalten nicht TO_CHAR () kann. Irgendwelche Vorschläge?
Die rote Erbse
Obwohl ich Dynamic SQL verwende und nur * auswähle (und dies nicht für eine Ausnahme für eine einzelne SQL-Spalte mit räumlichen Datentypen ändern möchte), könnte ich möglicherweise zwei Dinge ausprobieren: 1) Verwenden Sie ein anderes COLSEP wie '|' oder 2) Geben Sie vor der SELECT-Anweisung an, wie diese Spalte mit docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm
The Red Pea
2

So exportieren Sie von SQL Developer auf Ihr lokales System

Path : C:\Source_Table_Extract\des_loan_due_dtls_src_boaf.csv

    SPOOL "Path where you want to save the file"
    SELECT /*csv*/ * FROM TABLE_NAME;
Arpan Saini
quelle
1

CSV Export entgeht Ihren Daten nicht. Achten Sie auf Zeichenfolgen, die enden, \da das Ergebnis \"wie ein Escapezeichen "und nicht wie ein Escapezeichen aussieht \. Dann haben Sie die falsche Anzahl "und Ihre gesamte Zeile ist unterbrochen.

John
quelle
Das ist wahrscheinlich kein Fehler - Sie können entscheiden, wie Anführungszeichen maskiert werden, und standardmäßig wird es mit einem anderen Anführungszeichen und nicht mit einem Backslash maskiert. In diesem Fall "foo\"handelt es sich um eine perfekt gültige Zeichenfolge in Anführungszeichen.
Ken Williams
Es ist einfach genug, jedes Vorkommen von \ durch \\ zu ersetzen, wenn Sie dies im Voraus wissen. Vielen Dank!
Jpaugh
Ja, einfach genug und wahrscheinlich falsch für die meisten CSV-Importtools.
Wormbo