LOAD DATA INFILE mit Oracle

Diskutiere LOAD DATA INFILE mit Oracle im Datenbankprogrammierung Bereich.
L

Lia

Hi ihr lieben,

habe da Mal wieder eine Frage xD
Und zwar würde ich gerne Daten in eine CSV laden. Ich habe den Befehl "Load Data INFILE" genutzt aber der funktioniert für Oracle nicht, habe auch schon herausgefunden, dass es hierfir den SQLLoader gibt. Nur weiss ich nicht wie ich es genau in meine Java Datei einbauen soll.

Habe zurzeit

LOAD DATA INFILE /path/to/file REPLACE INTO TABLE....

Das würde ich gerne so umschreiben das es für die Oracle DB funktioniert.

LG und danke :)
 
L

Lia

@mihe7 guten Morgen :) danke.

Aus einer Csv lesen und in eine Tabelle einlesen. Wiederkehrend. Genau gleiche Struktur und teste erstmal lokal
 
L

Lia

Habe zur Zeit eine Datei test.sql im Java Projekt eingebunden

LOAD DATA LOCAL INFILE 'test.csv' REPLACE INTO TABLE temp_test...
 
mihe7

mihe7

Dazu müsstest Du SQL Loader aufrufen, was voraussetzt, dass dieses Tool (inkl. etwaiger zusätzlicher Abhängigkeiten) auf dem Rechner installiert ist, auf dem die Java-Anwendung läuft. Würde ich nicht machen.

Auch die Funktionen, die die DB selbst anbietet, funktionieren, wenn ich mich recht entsinne, nur mit Dateien, die sich auf dem Server befinden. Würde ich nicht machen.

Besser wäre es, das in Java zu haben. Je nachdem, wie Deine CSV aussieht, hast Du das schnell selbst oder unter Zuhilfenahme einer CSV-Bibliothek erledigt und bist dann weitestgehend von der DB unabhängig.
 
L

Lia

Vielen Dank für deine Antwort:)

Was kann ich da für eine Bibliothek nutzen ? Csvloader? Hatte da was gelesen .. oder ist es was anderes ?
 
L

Lia

Zur Zeit Funktioniert es nicht also für die Oracle db, dachte das ginge mit Load Data INFILE..
 
L

Lia

Ja genau, aber wie kann ich das so umschreiben , dass ich es für eine Oracle DB ausführen kann?
 
D

Dukel

Ja genau, aber wie kann ich das so umschreiben , dass ich es für eine Oracle DB ausführen kann?
Entweder startest du SQL*Loader und übergibst die entsprechenden Parameter oder du nutzt andere SQL Befehle und schickst dies direkt an Oracle. Aber den Befehl so umschreiben wird nicht gehen.

 
L

Lia

@Dukel vielen Dank für deine Antwort. Dieser Load data INFILE Befehl steht bei mir in einer ctl File. Ich wollte alles in eine .sql Datei packen aber da es mit dem Load data INFILE fur die oracle nicht funktioniert. Geht es nicht.. dh muss ich diese File über einen process builder aüsfuhren ? Oder wie genau ? Habe auch etwas über sqlcl gelesen ginge es auch mit sowas ? Sorry wirklich für solche Fragen
 
D

Dukel

Wie gesagt, es gibt mehrere Möglichkeiten. Wenn du das ganze mit dem SQL*Loader machen willst musst du diesen starten (mit Process Builder), bedingt aber, dass der installiert ist.
Wenn du es mit SQL Mitteln machen willst, dann wie in dem Link beschrieben z.B. mit den Temporären Tabellen.
SQLCL ist, wenn ich das richtig gegoggelt habe, ein CLI Tool um SQL Befehle und Scripte an Oracle zu schicken, das geht aber auch mit Java selbst (JDBC) und du bist nicht von dem Tool abhängig.
 
L

Lia

Vielen Dank !

Also habe halt eine .sh Datei in dieser sh datei werden halt 4 Befehle aufgerufen 3 davon sind .sql Dateien und eine .ctl .. ich wollte es halt nicht mehr über einen process builder machen also keine shell Scripte mehr aufrufen , sondern direkt über Java.. die sql Dateien sind ja kein Problem mir diese ctl File
 
D

Dukel

Dann musst du das selber implementieren. Entweder die CSV als SQL Datei (in lauter Inserts) umschreiben (z.B. mit Java) oder mit den externen Tabellen.
 
L

Lia

Du meinst das :

LOAD DATA INFILE test.csv
REPLACE INTO TABLE temp_test
FIELDS TERMINATED BY ',' OPTIONALLY BY '"'
TRAILING NULLCOLS (TEST_ID, TEST_NAME)

Habe das in der ctl File.. das umschreiben ??
 
mihe7

mihe7

"Umschreiben" ist der falsche Ausdruck. Du musst die Funktionalität selbst in Java implementieren. Dazu besorgst Du Dir am besten eine Bibliothek, mit der Du einfach CSV-Dateien einlesen kannst und dann schreibst Du einfach entsprechende INSERT-Statements (JDBC).
 
L

Lia

Ok Alles klar :) aber was mache ich mit den anderen befehlen wie das TRAILING NULLCOLS oder das mit dem REPLACE INTO TEMP_TESTTBL..
 
mihe7

mihe7

TRAILING NULLCOLS sorgt ja nur dafür, dass eine CSV-Datei gelesen werden kann, bei der wenigstens zwei Datensätze eine unterschiedliche Anzahl an Spalten haben. Wenn Du also eine CSV-Datei
Code:
header1,header2,header3
1,2,3
4,5
6,7,
8,9,10
hast, dann wird die Datei eingelesen und die fehlenden Werte (nach 4,5 und 6,7) durch NULL ersetzt.

Das wäre Aufgabe der CSV-Lib.

Und REPLACE INTO kannst Du nachbilden, indem Du z. B. die betreffende Zeile vor dem Einlesen löschst.
 
Thema: 

LOAD DATA INFILE mit Oracle

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben