Oracle
 sql >> Database >  >> RDS >> Oracle

Importa file CSV nella tabella Oracle utilizzando la stored procedure

Il file CSV è un file delimitato da virgole in cui i campi sono separati dalla virgola. In questo articolo, sto fornendo un esempio per importare il file CSV nella tabella Oracle utilizzando la stored procedure. La procedura memorizzata in Oracle è un'unità di programma PL/SQL che può essere un pacchetto autonomo o in un pacchetto di database.

È necessario disporre di un oggetto directory nel database Oracle che faccia riferimento al percorso del server in cui è archiviato il file. Nell'esempio seguente sto usando il nome dell'oggetto directory come CSV_DIR e il nome della procedura è read_csv. Creata anche una funzione GetString nella procedura read_csv per ottenere la stringa delimitata una per una .

Caricamento del file CSV nella tabella Oracle utilizzando la procedura 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;

Tieni presente che devi studiare il tuo file CSV per mappare correttamente la tabella di destinazione. Gestisci anche il formato della data per i campi della data, secondo il formato dei dati della tua data CSV.