Bonjour à tous,

Avant tout merci car votre forum m’a sauvé plus d’une fois.
Voilà mon problème et n’hésitez à m’allumer si je m’exprime mal. Cela fait 3 jours que je cherche sur le web et je n’y arrive pas :

En résumé :
Je pars d’une table contenant x ise (possible doublon et c’est à tout à normal). Cette table est construite à partir d’une vue.
Un ise dispose de 1 à n forfait.
La logique que je veux faire c’est :
Pour chaque ISE, je récupère son forfait (si monoforfait : RAS, par contre si bi forfait : je prends son max de forfait).  ici ce sera toujours qu’une seule ligne de récupérer.
Ensuite dans des boites, je mets son code_ise, son forfait, et un id (unique pour chaque ligne)
Enfin je fais un update sur cet ise en mettant son flag à 1.
Admettons qu’au second passage, nous avons encore le meme ise, et bien, je récupère son autre forfait grâce au max(forfait) mais surtout grâce à ce flag à 1 précedemment mis à jour.
/*
Ici se trouve un bloc CASE assez conséquent mais ce n’est pas lui le problème, je l’ai donc retirer pour me focaliser sur l’erreur
*/

Voici le code.
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
DECLARE 
w_dt_1 		 DATE := null;
w_dt_2 		 DATE := null;
FORFAIT 		 INTEGER := 0;
cd_ise_temp	 number := 0;
no_lig_temp	 number := 0;
flag_temp		 number := 0;
FORFAIT_1		 number := 0;
cd_ise_1		 number := 0;
no_lig_2		 number := 0;
cardinaliteLigne varchar2(150); 
CURSOR crs IS select s.cd_ise from exploit.tempouview s ; 
 
BEGIN
	FOR list_ise IN crs
	LOOP
	FORFAIT_1 := 0 ; cd_ise_1 := 0 ; no_lig_2 := 0 ;
 
	select z.FORFAIT, z.cd_ise, z.no_lig into FORFAIT_1, cd_ise_1, no_lig_2 from exploit.stat_aex_test z where z.FORFAIT in (select max(FORFAIT) from exploit.stat_aex_test 
	where CD_ISE = list_ise.cd_ise and flagtraite <> 1) and z.flagtraite = 0 and ROWNUM <= 1 ;
 
	UPDATE exploit.stat_aex_test zz set zz.flagtraite = 1 where zz.no_lig in (no_lig_2)  and zz.forfait in (FORFAIT_1) and zz.cd_ise in (cd_ise_1) ;
 
	END LOOP;
END;
/
• Avec 3 lignes tests dans stat_aex_test ça marche bien
• Avec la totalité des lignes soit 4252. Ça marche pas  Error: ORA-01403: no data found
ORA-06512: at line 17
SQLState: 02000
ErrorCode: 1403

Une chose étrange, quand je mets en commentaire ce fameux update, la boucle se passe bien sur ces fameuses 4252 lignes. C’est donc pourquoi je pense que cela provient de l’update.
J’espère que vous allez pouvoir m’éclairer.