Bonjour,
voilà j'ai un ordre SELECT tout simple dans la procedure suivante qui fait pas ce que j'attends
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
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
DECLARE
blabla dont CURS_PM...
BEGIN
    
   OPEN CURS_PM;

   LOOP 

	FETCH CURS_PM INTO v_row_id, v_name;
        EXIT WHEN CURS_PM%NOTFOUND;
	DBMS_OUTPUT.PUT_LINE('SBLA FETCH DI Name=<' || v_name || '>');
	BEGIN
		SELECT C.OU_ID
		INTO v_bon_id
		FROM S_OPTY_ORG C
		WHERE C.OPTY_ID = v_row_id
		AND C.X_EMPLOYEUR = 'Oui';
		
		IF SQLCODE = 0 THEN
			DBMS_OUTPUT.PUT_LINE('SBLA <sqlcode=0>');
			UPDATE S_OPTY 
			SET X_AG_PR_PM_EMPLOYEUR_ID = v_bon_id
			WHERE ROW_ID = v_row_id;
			n_cpt_upd := n_cpt_upd + 1;
		END IF;
		
		EXCEPTION
		WHEN NO_DATA_FOUND THEN
			DBMS_OUTPUT.PUT_LINE('SBLA <sqlcode=100>');
			UPDATE S_OPTY 
			SET X_AG_PR_PM_EMPLOYEUR_ID = null
			WHERE ROW_ID = v_row_id;	
			n_cpt_null := n_cpt_null + 1;
		WHEN TOO_MANY_ROWS THEN
			BEGIN
				-- ReLecture S_OPTY_ORG avec ajout de critères
				DBMS_OUTPUT.PUT_LINE('SBLA <TOO_MANY_ROWS>');
				SELECT A.OU_ID
				INTO v_bon_id
				FROM S_OPTY_ORG A
				WHERE A.OPTY_ID = v_row_id
				AND A.X_EMPLOYEUR = 'Oui'
				AND (A.X_DESTINATAIRE = 'Oui' OR A.X_COFINANCEUR = 'Oui' OR A.X_CONTRACTANT = 'Oui' OR A.X_TUTEUR = 'Oui'OR A.X_EXPERT = 'Oui');
					
				IF SQLCODE = 0 THEN 
					DBMS_OUTPUT.PUT_LINE('SBLA <employeur a un autre role>');
					UPDATE S_OPTY 
					SET X_AG_PR_PM_EMPLOYEUR_ID = v_bon_id
					WHERE ROW_ID = v_row_id;
					n_cpt_upd := n_cpt_upd + 1;
				END IF;
					
				EXCEPTION
				WHEN NO_DATA_FOUND THEN
					DBMS_OUTPUT.PUT_LINE('SBLA1 Employeur seul en double');
					n_cpt_doub := n_cpt_doub + 1;
				WHEN TOO_MANY_ROWS THEN
					DBMS_OUTPUT.PUT_LINE('SBLA2 Employeur avec autre role en double');
					n_cpt_doub := n_cpt_doub + 1;
			END;
	END;
	
	n_compteur := n_compteur + 1;
      
	--IF n_compteur > 50 THEN
		COMMIT;
	--END IF;
   END LOOP;
Voici la log et en bleu, par où passe mon code pour trois "DI Name" en particulier ...
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
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
Rattrapage Employeur PM1 - Debut a : 15/02/2007 17:29:42                        

SBLA FETCH DI Name=<66004452>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66007457>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66007457E1>                                                 
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66007457T1>                                                 
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009685>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009685E1>                                                 
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009702>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009702E1>                                                 
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009702T1>                                                 
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009909>                                                   
SBLA <TOO_MANY_ROWS>                                                            
???
SBLA FETCH DI Name=<66009909E1>                                                 
SBLA <TOO_MANY_ROWS>                                                            
???
SBLA FETCH DI Name=<66009909T1>                                                 
SBLA <TOO_MANY_ROWS>                                                            
SBLA1 Employeur seul en double                                                  
SBLA FETCH DI Name=<66009327>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009518>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009518S1>                                                 
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66006307>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009092>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009093>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009091>                                                   
SBLA <sqlcode=0>                                                                
SBLA FETCH DI Name=<66009685T1>                                                 
SBLA <sqlcode=0>                                                                
Fin M.A.J. Employeur PM1 : Nb enreg 	= 20                                       
Compteur.................. Nb update = 17                                       
Compteur.................. Nb null 	= 0                                         
Compteur.................. Nb doublon = 1                                       

PL/SQL procedure successfully completed.

Rattrapage Employeur PM1 - Fin a : 15/02/2007 17:29:43
On pourrait penser qu'il fait deux UPDATE pour les NAME 66009909 et 66009909E1 mais mon compteur d'update en compte 17 au lieu de 19 et sous Toad je vois bien qu'il a pas fait les updates ...
Et A priori, on n'est pas passé par le 2e pavé EXCEPTION puisque j'ai rien dans la log !
Savez-vous ce qu'il se passe ? Ai-je un pb de syntaxe ?

MERCI DE VOTRE AIDE