El archivo CSV es un archivo delimitado por comas en el que los campos están separados por comas. En este artículo, doy un ejemplo para importar un archivo CSV a una tabla de Oracle usando un procedimiento almacenado. El procedimiento almacenado en Oracle es una unidad de programa PL/SQL que puede ser independiente o en un paquete de base de datos.
Debe tener un objeto de directorio en la base de datos de Oracle que haga referencia a la ruta del servidor en el que se almacena el archivo. En el siguiente ejemplo, estoy usando el nombre del objeto de directorio como CSV_DIR y el nombre del procedimiento es read_csv. También creó una función GetString en el procedimiento read_csv para obtener la cadena delimitada una por una .
Cargar archivo CSV en la tabla de Oracle mediante el procedimiento 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;
Tenga en cuenta que debe estudiar su archivo CSV para asignar la tabla de destino correctamente. También maneje el formato de fecha para los campos de fecha, según su formato de datos de fecha CSV.
-
Errores, trampas y mejores prácticas de T-SQL:subconsultas
-
Cuándo y cómo usar la cláusula SQL PARTITION BY
-
Cómo eliminar todas las restricciones predeterminadas en la base de datos de SQL Server - Tutorial de SQL Server / TSQL, parte 94
-
Uso de la navegación solo con teclado en Word, Excel y PowerPoint (Parte 1:La cinta)