Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   csv aus Oracle Datenbank extrahieren (https://www.delphipraxis.net/183805-csv-aus-oracle-datenbank-extrahieren.html)

hedie 5. Feb 2015 18:23

Datenbank: Oracle • Version: 11g • Zugriff über: ODBC/Direkt

csv aus Oracle Datenbank extrahieren
 
Hallo zusammen

Ich habe folgendes Problem/Ziel:

Ich möchte aus einer Oracle Datenbank einige bestimmte Tabelle in ein CSV abspeichern.
Abfrage wäre also
Code:
SELECT * FROM TABLE
Nach dem ich diese CSVs habe, muss ich einige Spalten entfernen, und gewisse Spalten aus dem einen CSV in das andere importieren.
Wenn dies abgeschlossen ist, muss ich die Daten im neuen CSV in eine MySQL Datenbank speisen...

Dies alles möchte ich natürlich am ende mit einem einzelnen Klick erledigen lassen.
Am wichtigsten ist für mich, das extrahieren der Tabelle aus Oracle.
Für die beiden anderen Aufgaben, finde ich ziemlich sicher etwas mit google...

Danke euch schonmal!

DeddyH 5. Feb 2015 18:29

AW: csv aus Oracle Datenbank extrahieren
 
Etwas Ähnliches hatten wir doch gerade erst: http://www.delphipraxis.net/183803-a...umwandeln.html

[edit] Oracle kann doch von sich aus bereits nach CSV exportieren: http://www.held-informatik.de/tipps-...e-tabelle.html [/edit]

hedie 5. Feb 2015 18:38

AW: csv aus Oracle Datenbank extrahieren
 
Zitat:

Zitat von DeddyH (Beitrag 1288929)
Etwas Ähnliches hatten wir doch gerade erst: http://www.delphipraxis.net/183803-a...umwandeln.html

[edit] Oracle kann doch von sich aus bereits nach CSV exportieren: http://www.held-informatik.de/tipps-...e-tabelle.html [/edit]

Danke für deine Antwort.
Ja du hast recht, etwas ähnliches wird im erst genannten Thread besprochen.

Zum zweiten Link: sieht sehr interessant aus. Leider weiss ich nicht, wie ich die SQL Plus Anfrage an den Oracle Server senden soll..

Ich habe noch dies im Netz gefunden:
http://www.orafaq.com/wiki/Delphi

Eigentlich ist dies exakt das was ich brauche.
Leider kennt mein Delphi XE6 Starter kein SqlExpr und auch kein DbxOracle.
Kennt jemand diese Komponenten und weiss ob man diese herunterladen kann?

[EDIT] http://www.devart.com/dbx/oracle/ Ja hier... Sind kostenpflichtig. Somit leider keine Lösung für mich!

Danke!

hedie 5. Feb 2015 18:46

AW: csv aus Oracle Datenbank extrahieren
 
Ich habe Delphi Starter.
Deshalb kann ich ADODB nicht verwenden :(

Sir Rufo 5. Feb 2015 19:24

AW: csv aus Oracle Datenbank extrahieren
 
Man kann es sich kompliziert machen und alle Tabellen erst als CSV exportieren, die dann auseinanderpflücken, Teile rauswerfen, Teile reinnehmen, schauen, ob die auch so zusammenpassen ..... bla bla bla ...

Oder man erstellt sich eine Abfrage, die alle Daten schön zusammen sucht und exportiert diese dann.

Variante 1: ABM mit Fehlerpotential
Variante 2: Schnell gemacht und einfach zu pflegen

Welches Schweinerl hättens denn gern?

Sir Rufo 5. Feb 2015 19:27

AW: csv aus Oracle Datenbank extrahieren
 
Zitat:

Zitat von hedie (Beitrag 1288931)
Ich habe Delphi Starter.
Deshalb kann ich ADODB nicht verwenden :(

Du hast keine Datenbank-Komponenten?

Dann lege dir vor die beiden DB-Server jeweils einen Webserver mit einem PHP-REST und du führst den Abgleich per Cron-Job aus. Die Delphi Tüte kannst du also zulassen :stupid:

hedie 5. Feb 2015 19:57

AW: csv aus Oracle Datenbank extrahieren
 
Zitat:

Zitat von Sir Rufo (Beitrag 1288933)
Zitat:

Zitat von hedie (Beitrag 1288931)
Ich habe Delphi Starter.
Deshalb kann ich ADODB nicht verwenden :(

Du hast keine Datenbank-Komponenten?

Dann lege dir vor die beiden DB-Server jeweils einen Webserver mit einem PHP-REST und du führst den Abgleich per Cron-Job aus. Die Delphi Tüte kannst du also zulassen :stupid:

Am liebsten hätte ich natürlich die Variante 2

Dies klingt interessant. Einen Webserver habe ich sowieso im Betrieb, um dann die Daten aus der MySQL DB abzufragen.
PHP ebenfalls.

Bei einem solchen Abgleich würde ich wie folgt vorgehen:

Gesamte MySQL Tabelle löschen.
Spalten bzw. Zeilen nach und nach mit CREATE und den DATEN aus der Oracle DB auffüllen.
Dannach würde ich die zweite Oracle Tabelle wählen und dann mit UPDATE die fehlenden Spalten in der MySQL Tabelle mit den Daten aus der Oracle Tabelle befüllen.

Warum würde ich die komplette Tabelle löschen?
Weil sich an diversen Stellen der Oracle Tabelle Daten ändern können.

Der Sync umfasst ca. 12000 Zeilen aus der Oracle Tabelle.
Als ich mit PHP und oci_query zuletzt folgenden Query ausführe: "SELECT * FROM tabellexy" ist mir der Firefox bzw. der Apache Service abgeschmiert...

Gibt es da elegantere Wege oder Tipps eurerseits?

Sir Rufo 5. Feb 2015 21:00

AW: csv aus Oracle Datenbank extrahieren
 
Ich weiß ja nicht was du da genau vorhast und wieviel Speicher die komplette Tabelle verbraucht.

Aber benötigst du die komplette Tabelle? Du hast doch geschrieben, du hast Daten aus unterschiedlichen Tabellen, die irgendwie zusammen müssen.

Ausserdem kann man das auch in Häppchen unterteilen, wenn es für WebServer A oder B zu groß vom Speicher ist. Man muss da nur logisch vorgehen.
  • Zuerst stellt man die Daten zusammen, so wie man die braucht.
  • Dann überlegt man sich das Übertragungsformat (ich präferiere da JSON).
  • Dann schaut man sich an, wieviel RAM die Ausführung benötigt und gibt dem Server mehr zur Verfügung (PHP, Apache haben jeweils ein Session-Limit, was man verändern kann) oder teilt die Übertragung in mehrere Pakete auf.
  • Die Pakete werden auf dem Zielserver in eine Import-Tabelle oder sonst wie zwischengespeichert.
  • Sind alle Pakete da, dann werden diese in korrekter Reihenfolge innerhalb einer Transaktion auf den Zielserver gespeichert.

hedie 6. Feb 2015 06:59

AW: csv aus Oracle Datenbank extrahieren
 
Zitat:

Zitat von Sir Rufo (Beitrag 1288936)
Ich weiß ja nicht was du da genau vorhast und wieviel Speicher die komplette Tabelle verbraucht.

Aber benötigst du die komplette Tabelle? Du hast doch geschrieben, du hast Daten aus unterschiedlichen Tabellen, die irgendwie zusammen müssen.

Ausserdem kann man das auch in Häppchen unterteilen, wenn es für WebServer A oder B zu groß vom Speicher ist. Man muss da nur logisch vorgehen.
  • Zuerst stellt man die Daten zusammen, so wie man die braucht.
  • Dann überlegt man sich das Übertragungsformat (ich präferiere da JSON).
  • Dann schaut man sich an, wieviel RAM die Ausführung benötigt und gibt dem Server mehr zur Verfügung (PHP, Apache haben jeweils ein Session-Limit, was man verändern kann) oder teilt die Übertragung in mehrere Pakete auf.
  • Die Pakete werden auf dem Zielserver in eine Import-Tabelle oder sonst wie zwischengespeichert.
  • Sind alle Pakete da, dann werden diese in korrekter Reihenfolge innerhalb einer Transaktion auf den Zielserver gespeichert.

Die Komplette Tabelle als CSV gespeichert, benötigt ca. 3Mbyte
Ja du hast recht. Ich benötige eigentlich nicht die komplette sondern teile von Tabelle A und Teile von Tabelle B

Somit würde meine Abfrage lauten:
Code:
SELECT XY, ABC, CDE, FGH FROM tabelle
Und dann dies als Array abspeichern. Dies geht mit oci_fetch_all

Dannach dieses wieder im MySQL mit INSERT einfügen.
Die nun leer gebliebenen Spalten, würde ich dann mit UPDATE mit den Daten aus der Oracle Tabelle B befüllen.

Sir Rufo 6. Feb 2015 07:04

AW: csv aus Oracle Datenbank extrahieren
 
Und warum keine Abfrage die dir die Daten komplett liefert?
SQL-Code:
select foo.a, foo.b, bar.c, bar.d
from foo
join bar on bar.a = foo.a
Ist das so ein Hobby von dir, es immer möglichst auf dem umständlichsten Weg zu lösen? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz