Le fichier CSV est un fichier délimité par des virgules dans lequel les champs sont séparés par la virgule. Dans cet article, je donne un exemple pour importer un fichier CSV dans une table oracle à l'aide d'une procédure stockée. La procédure stockée dans Oracle est une unité de programme PL/SQL qui peut être un package autonome ou dans une base de données.
Vous devez avoir un objet de répertoire dans la base de données Oracle faisant référence au chemin du serveur dans lequel le fichier est stocké. Dans l'exemple ci-dessous, j'utilise le nom de l'objet répertoire comme CSV_DIR et le nom de la procédure est read_csv. Également créé une fonction GetString dans la procédure read_csv pour obtenir la chaîne délimitée une par une .
Chargement du fichier CSV dans la table Oracle à l'aide de la procédure 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;
Veuillez noter que vous devez étudier votre fichier CSV pour mapper correctement la table cible. Gérez également le format de date pour les champs de date, conformément à votre format de données de date CSV.
-
Comment renommer toutes les contraintes par défaut selon les normes de dénomination ou la convention de dénomination dans SQL Server - Tutoriel SQL Server / TSQL Partie 93
-
Introduction aux types de graphiques
-
Comment créer une vue dans SQL Server
-
Exemples de curseurs PLSQL - Curseurs explicites, implicites et de référence