CSV-bestand is een door komma's gescheiden bestand waarin velden worden gescheiden door komma's. In dit artikel geef ik een voorbeeld om een CSV-bestand in de Oracle-tabel te importeren met behulp van de opgeslagen procedure. De opgeslagen procedure in Oracle is een PL/SQL-programma-eenheid die stand-alone of in een databasepakket kan zijn.
U moet een directory-object in de Oracle-database hebben dat verwijst naar het serverpad waarin het bestand is opgeslagen. In het onderstaande voorbeeld gebruik ik de naam van het directory-object als CSV_DIR en de procedurenaam is read_csv. Ook een functie GetString gemaakt in de procedure read_csv om de gescheiden string één voor één te krijgen .
CSV-bestand in Oracle-tabel laden met behulp van PL/SQL-procedure
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;
Houd er rekening mee dat u uw CSV-bestand moet bestuderen om de doeltabel correct in kaart te brengen. Behandel ook het datumformaat voor datumvelden, volgens uw CSV-datumgegevensformaat.