Hallo,
erstmal ein frohes neues Jahr an alle.
Ebenso
Ich habe eine .csv Datei die ich gerne in eine Oracle Tabelle
einpflegen möchte.
Es gibt (ich glaube seit Version 8i) die Möglichkeit, sog.
Externe Tabellen anzulegen (external tables). Unten poste
ich Dir ein Beispiel dazu. Du kannst auf so einen external
table selektieren, nicht jedoch insert/update/delete oder
Indizes anlegen. Aber es geht ja nur darum, die Daten in die
Datenbank zu bekommen, dafür ist ein externer table gerade
das Richtige.
Habe mich schon an UTL_FILE probiert, aber
ich weiß nicht warum, ich bekomme es nicht hin.
Dazu auch ein Hinweis, den ich selbst schon oft vergessen habe:
Verzeichnisse, auf die Du mit utl_file-Prozeduren zugreifen
willst, müssen als Parameter UTL_FILE_DIR definiert sein.
Nur auf die so definierten kannst Du lesend und schreibend
per utl_file zugreifen. Welche bei Dir definiert sind, findest
Du mit folgendem Befehl in SQLPlus heraus (als system ausführen):
SHOW PARAMETER UTL
Und nun das Beispiel fuer external tables. Im Beispiel ist
der Feldtrenner das |-Zeichen. Wenn Du ein anderes verwendest,
zum Beispiel das Semikolon, musst Du beim create table-statement
dieses entsprechend ändern (Zeile FIELDS TERMINATED BY…)
Viel Erfolg!
Gruss,
Ralf
Lese-Zugriff auf eine im Filesystem abgelegte CSV-Datei
Schritt 1:
create or replace Directory MEINDIRECTORY as ‚/var/tmp‘;
(muss ein gültiges Unix-Verzeichnis sein, welches auch über
UTL_FILE_DIR erreichbar ist)
Schritt 2:
CREATE TABLE Tabellenname
( )
ORGANIZATION external (
TYPE oracle_loader
DEFAULT DIRECTORY MEINDIRECTORY
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
CHARACTERSET
– BADFILE log_file_dir:‚sh_sales.bad_xt‘
– LOGFILE log_file_dir:‚sh_sales.log_xt‘
FIELDS TERMINATED BY „|“
OPTIONALLY ENCLOSED BY ‚"‘ AND ‚"‘
LDRTRIM
)
LOCATION (’’)
)
REJECT LIMIT UNLIMITED;
Beispiel:
In UTL_FILE_DIR ist /var/tmp enthalten.
Datei anlegen: „/var/tmp/demo.csv“ mit folgendem Inhalt:
1|eins
2|„zwei“
3|drei
4|vier
5|„Fünf“
SQLPlus:
CREATE OR REPLACE DIRECTORY Demo AS ‚/var/tmp‘;
CREATE TABLE Demo
( ID NUMBER,
NAME VARCHAR2(20) )
ORGANIZATION external (
TYPE oracle_loader
DEFAULT DIRECTORY Demo
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
CHARACTERSET WE8ISO8859P1
FIELDS TERMINATED BY „|“
OPTIONALLY ENCLOSED BY ‚"‘ AND ‚"‘
LDRTRIM
)
LOCATION (‚demo.csv‘)
)
REJECT LIMIT UNLIMITED;
SELECT * FROM Demo WHERE ID >= 3;
ID NAME
3 drei
4 vier
5 Fünf