2009-12-23 6 views
7

Ich habe eine CSV-Datei, die eine ID und mehrere andere Spalten enthält. Ich habe auch eine Tabelle in Oracle, wo die ID eine Zeile identifiziert. Wie kann ich die Werte, die in der Tabelle enthalten sind, am besten durch die Werte in der CSV-Datei ersetzen, während ich die anderen Spalten so belasse, wie sie vorher waren?Update Oracle-Tabelle mit Werten aus der CSV-Datei

Dies muss mit in Oracle selbst verfügbaren Tools (d. H. PL/SQL- oder SQL-Skripten) geschehen, ich kann keine "echte" Skriptsprache (Python, ...) oder ein "echtes" Programm verwenden.

Danke, Thomas

Antwort

10

Blick auf externen Tabellen im doc Oracle. Sie können die CSV-Datei auf die Oracle-Server-Box kopieren und Oracle dazu bringen, sie als "normale" Tabelle darzustellen, in der Sie Abfragen ausführen können.

Dann wird das Problem nur eines der Daten von einer Tabelle in eine andere zu kopieren.

Externe Tabellen sind wirklich sehr nützlich für die Handhabung von Datenlasten wie diese.

+0

+1 arbeiten. * EXTERNAL TABLE * ist der Schlüssel. Hier finden Sie http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch11.htm#1007030 zum Laden von Daten. – Guru

1

Eine andere Möglichkeit ist, die Datei Zeile für Zeile einzulesen, die Felder in der Zeile mit etwas wie REGEXP_REPLACE zu analysieren und die entsprechenden Zeilen zu aktualisieren. Sie können eine kommagetrennte Zeichenfolge wie folgt analysieren:

SELECT TRIM(REGEXP_REPLACE(strLine, '(.*),.*,.*', '\1')), 
     TRIM(REGEXP_REPLACE(strLine, '.*,(.*),.*', '\1')), 
     TRIM(REGEXP_REPLACE(strLine, '.*,.*,(.*)', '\1')) 
    INTO strID, strField1, strField2  FROM DUAL; 

Dies ist nützlich, wenn Ihre Website nicht die Verwendung von externen Tabellen zulässt.

Teilen und genießen.

5

Das "Standard" Oracle-Tool zum Laden von CSV-Datendateien in die Datenbank ist SQLLoader. Normalerweise wird es zum Einfügen von Datensätzen verwendet, aber die Steuerdatei kann so konfiguriert werden, dass sie stattdessen ein Update ausführt, wenn Sie dies wünschen.

Es ist nicht das einfachste Werkzeug der Welt zu benutzen (lesen Sie "es ist ein Schmerz in den Arsch"), aber es ist Teil des Standard-Toolkits, und es macht den Job.

+0

Externe Tabellen sind ebenfalls "Standard" und sind viel flexibler als SQL-Loader. Zum einen sind sie schneller, weil Sie die Daten nicht wirklich in Oracle laden müssen, um zugänglich zu sein. Und es wird so dargestellt, dass Sie normales SQL darauf verwenden können. – CMG

1

Verwenden Sie SQL * Loader

sqlldr [email protected]/password control=load_csv.ctl 

Die load_csv.ctl Datei

load data 
infile '/path/to/mydata.csv' 
into table mydatatable 
fields terminated by "," optionally enclosed by '"'   
(empno, empname, sal, deptno) 

wo /path/to/mydata.csv der Pfad zur CSV-Datei, die Sie laden müssen , unter Windows etwas wie C: \ data \ mydata.csv. Der Tabellenname ist mydatatable. Die Spalten werden aufgelistet, damit sie in der CSV-Datei in der letzten Zeile angezeigt werden.

Sofern Sie nicht über eine sehr große Datenmenge verfügen, ist dies der einfachste Weg, die Daten zu erhalten. Wenn die Daten regelmäßig geladen werden müssen, kann dies in einem Shell-Skript verarbeitet und von CRON ausgeführt werden auf einem U * NX-System.

-7

Zuerst eine Tabelle erstellen und setzen alle Ihre CSV-Daten in dieser Tabelle, und schreiben Sie dann einen Cursor auf dem Oracle-Tabelle zu aktualisieren, mit der CSV-Tabelle

zu IDs entsprechend erstellt

ex

create table t 

und dann Importieren Sie Ihre CSV-Daten in diese Tabelle.

schreiben jetzt einen Cursor

declare 
cursor c1 is 
select * from t1; 
begin 
update Oracle table 
set 
t1.Column=t2.column 
where t1.id=t2.id; 

Ich denke, es

Verwandte Themen