sql >> Database >  >> RDS >> Oracle

CSV-bestand importeren in Oracle-tabel met behulp van opgeslagen procedure

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.

  1. Hoe SET ROWCOUNT werkt in SQL Server

  2. MySQL - hoeveel rijen kan ik invoegen in één enkele INSERT-instructie?

  3. PostgreSQL hoe intervalwaarde '2 dagen' samen te voegen

  4. ExecuteScalar vs ExecuteNonQuery bij het retourneren van een identiteitswaarde