bonjour,
J'essaye d'insérer des lignes dans une table munie d'une contrainte d'intégrité.
Lorsque les lignes existent déjà, l'insertion plante (très bien).
Mais lorsque j'essaye d'insérer des lignes de manière répétitive avec un curseur dans un bloc de code, l'exécution s'arrête au premier échec d'insertion.
Comment gérer cette exception et poursuivre l'exécution à la valeur suivante du curseur ?
Evidemment, une solution plus propre consisterait à faire une bonne sélection
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 DECLARE CURSOR c_sect IS SELECT id_secteur FROM t_secteur; BEGIN FOR c IN c_sect LOOP dbms_output.put_line( To_char( c.id_secteur ) ) ; INSERT INTO t_user (id_secteur,id_agent) SELECT c.id_secteur,id_agent FROM agent WHERE id_agent IN('toto','tata') ; END LOOP ; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ROLLBACK; END ; /
Mais je me pose la question de la gestion de l'exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT c.id_secteur,id_agent FROM agent WHERE id_agent IN('toto','tata') AND NOT EXISTS( SELECT id_secteur,id_agent FROM t_user WHERE id_secteur=c.id_secteur AND id_agent IN('toto','tata') ) );
des possibilités et moyens d'arrêter ou poursuivre un curseur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ?? ;
Merci d'avance
Partager