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.
• Avec 3 lignes tests dans stat_aex_test ça marche bien
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 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.
Partager