1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
CREATE OR REPLACE PROCEDURE MA_PROCEDURE IS
/* Déclaration des variables */
fichier utl_file.file_type;
buffer VARCHAR2 (1024);
pos1 INT := 1;
pos2 INT := 1;
Variable_1 TABLE_1.COLONNE_1%TYPE;
VARIABLE_2 TABLE_1.COLONNE_2%TYPE;
ESL TABLE_1.COLONNE_2%TYPE;
ESF TABLE_1.COLONNE_2%TYPE;
EST TABLE_1.COLONNE_2%TYPE;
premiereligne INT :=1;
/* Début de procédure */
BEGIN
/* Ouverture du fichier source */
fichier := utl_file.fopen ('chemin','fichier.csv','r');
LOOP
BEGIN
/* Lecture */
IF premiereligne = 0 THEN --on ne veut pas lire la premiere ligne du fichier qui contient les noms de colonnes
pos1 := 1;
pos2 := 1;
utl_file.get_line (FILE => fichier ,buffer => buffer);
pos1 := INSTR (buffer, ';', 1, 3)+1;
pos2 := INSTR (buffer, ';', 1, 4);
Variable_1 := SUBSTR(buffer, pos1, pos2-pos1);
pos1 := INSTR (buffer, ';', 1, 6)+1;
pos2 := INSTR (buffer, ';', 1, 7);
VARIABLE_2 := SUBSTR(buffer, pos1, pos2-pos1);
/* Update */
IF Variable_1 <> "ESL" AND Variable_1 <> "ESF" THEN
UPDATE TABLE_1 SET COLONNE_2 = VARIABLE_2
WHERE COLONNE_1 = Variable_1;
ELSE
IF Variable_1 = "ESL" THEN ESL := VARIABLE_2;
END IF;
IF Variable_1 = "ESF" THEN ESF :=VARIABLE_2;
END IF;
END IF;
ELSE
premiereligne :=0;
END IF;
END;
END LOOP;
EST := ESL + ESF;
UPDATE TABLE_1 SET COLONNE_2 = EST
WHERE COLONNE_1 = "EST";
utl_file.fclose(fichier);
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END MA_PROCEDURE;
/ |
Partager