Die CSV-Datei ist eine durch Kommas getrennte Datei, in der Felder durch das Komma getrennt sind. In diesem Artikel gebe ich ein Beispiel zum Importieren einer CSV-Datei in eine Oracle-Tabelle mithilfe einer gespeicherten Prozedur. Die gespeicherte Prozedur in Oracle ist eine PL/SQL-Programmeinheit, die eigenständig oder in einem Datenbankpaket vorliegen kann.
Sie müssen ein Verzeichnisobjekt in der Oracle-Datenbank haben, das auf den Serverpfad verweist, in dem die Datei gespeichert ist. Im folgenden Beispiel verwende ich den Verzeichnisobjektnamen als CSV_DIR und den Prozedurnamen als read_csv. Außerdem wurde eine Funktion GetString in der Prozedur read_csv erstellt, um die getrennte Zeichenfolge einzeln abzurufen .
Laden einer CSV-Datei in eine Oracle-Tabelle mithilfe des PL/SQL-Verfahrens
CREATE OR REPLACE PROCEDURE read_csv IS l_file_type UTL_FILE.file_type; l_string VARCHAR2 (32765); TYPE Fieldvalue IS TABLE OF VARCHAR2 (4000) INDEX BY BINARY_INTEGER; t_field Fieldvalue; FUNCTION GetString (Source_string IN VARCHAR2, Field_position IN NUMBER, UnTerminated IN BOOLEAN DEFAULT FALSE, Delimiter IN VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS iPtrEnd PLS_INTEGER := 0; iPtrStart PLS_INTEGER := 0; vcSourceStrCopy VARCHAR2 (4000) := Source_string; BEGIN IF UnTerminated THEN vcSourceStrCopy := vcSourceStrCopy || Delimiter; END IF; IF Field_Position > 1 THEN iPtrStart := INSTR (vcSourceStrCopy, Delimiter, 1, Field_Position - 1) + LENGTH (Delimiter); ELSE iPtrStart := 1; END IF; iPtrEnd := INSTR (vcSourceStrCopy, Delimiter, 1, Field_Position); RETURN SUBSTR (vcSourceStrCopy, iPtrStart, (iPtrEnd - iPtrStart)); END GetString; BEGIN l_file_type := UTL_FILE.Fopen ('CSV_DIR', 'abc.csv', 'r'); LOOP UTL_FILE.Get_Line (l_file_type, l_string); l_string := l_string || ','; FOR n IN 1 .. REGEXP_COUNT (l_string, ',') LOOP t_field (n) := Getstring (l_string, n, FALSE, ','); END LOOP; INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (t_field (1), t_field (2), t_field (3), t_field (4), TO_DATE (t_field (5), 'dd/mm/yyyy'), t_field (6), t_field (7), t_field (8)); END LOOP; UTL_FILE.Fclose (l_file_type); COMMIT; EXCEPTION WHEN OTHERS THEN IF UTL_FILE.is_open (l_file_type) THEN UTL_FILE.Fclose (l_file_type); END IF; END;
Bitte beachten Sie, dass Sie Ihre CSV-Datei studieren müssen, um die Zieltabelle korrekt abzubilden. Behandeln Sie auch das Datumsformat für Datumsfelder gemäß Ihrem CSV-Datumsdatenformat.