Plik CSV to plik rozdzielany przecinkami, w którym pola są oddzielone przecinkami. W tym artykule podam przykład importowania pliku CSV do tabeli Oracle za pomocą procedury składowanej. Procedura składowana w Oracle to jednostka programu PL/SQL, która może być samodzielna lub w pakiecie bazy danych.
Musisz mieć obiekt katalogu w bazie danych Oracle odwołujący się do ścieżki serwera, w którym przechowywany jest plik. W poniższym przykładzie używam nazwy obiektu katalogu jako CSV_DIR, a nazwa procedury to read_csv. Utworzył również funkcję GetString w procedurze read_csv, aby uzyskać jeden po drugim rozdzielany ciąg .
Ładowanie pliku CSV do tabeli Oracle przy użyciu procedury PL/SQL
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;
Pamiętaj, że musisz przestudiować plik CSV, aby poprawnie zmapować tabelę docelową. Obsługuj również format daty dla pól daty, zgodnie z formatem danych daty CSV.