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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| CREATE OR REPLACE PROCEDURE get_nom IS
v_sigle NUMBER (1):=1;
v_datecreation NUMBER (1):=1;
v_raisonsociale NUMBER (1):=1;
v_idactivite NUMBER (1):=1;
TYPE aat_id IS TABLE OF tier.IDTIER%type
INDEX BY PLS_INTEGER;
TYPE aat_sigle IS TABLE OF tier.sigle%type
INDEX BY PLS_INTEGER;
TYPE aat_creation IS TABLE OF tier.datecreation%type
INDEX BY PLS_INTEGER;
TYPE aat_raison IS TABLE OF tier.raisonsociale%type
INDEX BY PLS_INTEGER;
TYPE aat_ap IS TABLE OF infosactiviteprofessionnelle.idactivite%type
INDEX BY PLS_INTEGER;
aa_ids aat_id;
aa_creation aat_creation;
aa_activite aat_ap;
aa_raison aat_raison;
aa_sigle aat_sigle;
-- i PLS_INTEGER := 0;
u PLS_INTEGER := 0;
-- v_number_of_lines number(30);
--
CURSOR sigledcrs_cur
IS
SELECT t.idtier, t.sigle, t.datecreation, t.raisonsociale,
infop.idactivite
FROM tier t, infosactiviteprofessionnelle infop
WHERE (t.sigle IS NULL)
OR (t.datecreation IS NULL)
OR (t.raisonsociale IS NULL)
OR (infop.idactivite IS NULL)
AND ( t.typepersonne = 'PP'
AND t.idagenteco IN (32)
AND t.idactiviteprof = infop.idactiviteprof
);
BEGIN
open sigledcrs_cur;
LOOP
FETCH sigledcrs_cur BULK COLLECT INTO aa_ids,aa_sigle,aa_creation,aa_raison,aa_activite limit 10000;
IF aa_sigle IS NULL
THEN
v_sigle := 1;
ELSE
v_sigle := 0;
END IF;
IF aa_creation IS NULL
THEN
v_datecreation := 1;
ELSE
v_datecreation := 0;
END IF;
IF aa_raison IS NULL
THEN
v_raisonsociale := 1;
ELSE
v_raisonsociale := 0;
END IF;
IF aa_activite IS NULL
THEN
v_idactivite := 1;
ELSE
v_idactivite:= 0;
END IF;
FORALL i IN 1 .. aa_ids.COUNT
MERGE INTO nfiabilisation nf
USING(select aa_ids(i) as idtier from tier) ti
on(nf.idtier=ti.idtier)
WHEN MATCHED THEN
UPDATE
SET sigle=v_sigle,
activiteprincipale= v_idactivite,
raisonsociale=v_raisonsociale,
datecreation=v_datecreation
-- u := u + SQL%ROWCOUNT;
-- COMMIT;
--IF SQL%ROWCOUNT = 0 THEN
WHEN NOT MATCHED THEN
INSERT (IDTIERAFIAB,idtier,sigle,datecreation,raisonsociale,activiteprincipale,TYPEPERSONNE)
VALUES (nfiabilisation_seq.NEXTVAL,ti.idtier,v_sigle,v_datecreation,v_raisonsociale,v_idactivite,'PP'
);
-- i := i + 1;COMMIT;
--END IF;
u := u + SQL%ROWCOUNT;
EXIT WHEN sigledcrs_cur%NOTFOUND;
END LOOP;
close sigledcrs_cur;
DBMS_OUTPUT.PUT_LINE( u || ' rows merged.' );
-- DBMS_OUTPUT.PUT_LINE( i || ' rows inserted.' );
EXCEPTION
WHEN NO_DATA_FOUND
THEN
raise_application_error (-20992, 'aucune donnée trouvée');
END get_nom;
/ |
Partager