Oracle - Automatisches Exportieren / Entladen von Daten


7

Oracle SQL Developer bietet die Möglichkeit, den Inhalt eines Abfrageergebnisses in verschiedene Formate (CSV / feste Breite / Excel / XML) zu exportieren. Gibt es eine Möglichkeit, dies zu automatisieren?

Wenn nicht, welche kostenlosen Tools stehen zur Verfügung, mit denen ich Exporte in dieselben Formate automatisieren kann, in die SQL Developer exportieren kann?

Antworten:


8

Es gibt viele Möglichkeiten, Daten aus Oracle zu exportieren und die Funktionalität zu automatisieren. Stellen Sie jedoch sicher, dass Sie genau wissen, wofür der Datenexport verwendet wird. Wenn es sich um Interop zwischen Systemen handelt, exportieren Sie es in ein Format, das Ihr empfangendes System verstehen kann. Wenn es sich um Sicherungszwecke handelt, wählen Sie die Methode exp / expdp (Datenpumpe), da bei einer Datenbanksicherung viel mehr als nur Daten gespeichert werden müssen. (Besser noch, verwenden Sie einfach RMAN. Aber ich kenne viele Datenbankadministratoren, die auch gerne regelmäßig vollständige DB-Exporte durchführen.)

Sie können eine Reihe von Werkzeugen verwenden, um dies zu erreichen, wobei TOAD das ist, was Ihnen in den Sinn kommt. Es verfügt über ein leistungsstarkes Datenexport-Tool, das die Zeitplanung unterstützt. Es ist eine kostenlose Version verfügbar, aber ich bin mir nicht sicher, ob sie über die Planungsfunktionalität verfügt. Einen Versuch wert.

Verwenden Sie alternativ die Tools, die Ihnen bereits zur Verfügung stehen: SQL * PLUS, PL / SQL und cron (oder den Windows Scheduler, wenn Sie Windows ausführen). Ein gutes Beispiel für das Schreiben einer PL / SQL-Routine, die eine Tabelle in eine CSV-Datei exportiert, finden Sie unter http: //asktom.oracle.com/pls/asktom/f? P = 100: 11: 0 :::: p11_question_id: 88212348059 . Wenn Sie eine Prozedur verwenden, können Sie sie über den Oracle Job Scheduler planen.

Sie können ähnliche Dinge auch nur mit SQL * PLUS ausführen (ohne eine Prozedur schreiben zu müssen), aber es ist nicht ganz so flexibel, aber für das, was Sie wollen, ist es möglicherweise genau das, was Sie brauchen. SQL * PLUS ist auch leicht skriptfähig, sodass Sie es jederzeit über cron / Windows Scheduler aufrufen können.

SQL * PLUS funktioniert für sich genommen sehr gut, um gute Berichte mit fester Breite zu erstellen, aber es ist auch möglich, HTML und CSV zu erstellen. XML erfordert wahrscheinlich eine Prozedur, aber ich bin hier kein Export, daher ist SQL * PLUS hier möglicherweise nicht perfekt (es wird jedoch in HTML ausgegeben, sodass dies möglicherweise gut genug ist). Denken Sie beim Exportieren nach Excel daran, dass die aktuellen Versionen XML als Dateiformat verwenden. Dies macht die Arbeit einfach (auf eine Weise) und auf andere Weise schmerzhaft (z. B. müssen Sie im Voraus wissen, wie viele Zeilen in der Ausgabedatei enthalten sein werden) ).

Unabhängig davon sollten Sie mit ein wenig Arbeit und der Kombination von zwei oder drei Tools in der Lage sein, Ihre Daten in einem beliebigen Format nach einem beliebigen Zeitplan zu exportieren.

Ich hoffe, das hilft.


-1
/** **/
DECLARE
   lfFilelog UTL_FILE.FILE_TYPE;

   lspath varchar2(50) := 'c:\';
   lsfile varchar2(50) := 'file';
BEGIN
   lfFilelog := UTL_FILE.FOPEN(lspath,lsfile||'.txt','w');

   FOR r IN (SELECT FROM table) LOOP
      UTL_FILE.PUT_LINE(lfFilelog ,r.row);
   END LOOP;

   UTL_FILE.FCLOSE_ALL;
EXCEPTION
   WHEN UTL_FILE.INVALID_OPERATION THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.PUT_LINE(lfFilelog,' Invalid File open Operation');
      UTL_FILE.FCLOSE_ALL;
      RAISE_APPLICATION_ERROR(-20051,'Invalid File open Operation');

   WHEN UTL_FILE.INVALID_FILEHANDLE THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.PUT_LINE(lfFilelog,' Invalid File Name');
      UTL_FILE.FCLOSE_ALL;
      RAISE_APPLICATION_ERROR(-20052,'Invalid File Name');

   WHEN UTL_FILE.READ_ERROR THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.PUT_LINE(lfFilelog,' Read Error');
      UTL_FILE.FCLOSE_ALL;
      RAISE_APPLICATION_ERROR(-20053,'Read Error');

   WHEN OTHERS THEN
      UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
      UTL_FILE.FCLOSE_ALL;
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      ROLLBACK;
END;

2
Ich möchte nur klarstellen, dass die in der obigen Anweisung UTL_FILE.PUT_LINE (lfFilelog, r.row) definierte "r.row" -Sintax; Das letzte Mal, wenn ich nachschaue, wird es in Oracle 8i, 9i, 10g und 11.2.0.1 nicht unterstützt

2
-1 SELECT FROM tableist keine gültige SQL-Anweisung. r.rowFunktioniert nur, wenn die Auswahlliste der Abfrage ein Feld mit dem Namen enthält row. In den meisten Fällen möchten Sie mehr als eine Spalte exportieren. Es ist nicht sinnvoll, einen Fehler zu erkennen, der durch das Öffnen oder Schreiben einer Datei verursacht wurde, und zu versuchen, die Fehlermeldung in dieselbe Datei zu schreiben. Dies löst eine weitere Ausnahme aus und file_close, dbms_output_put_line und raise_error werden nicht ausgeführt.
Wunder173
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.