Bonjour a tous,
j ai un petit probleme avec mon bloc pl/sql.
Je veux faire des updates sur 2 tables dans un bloc pl/sql.
Je verouille d'abord mes champs via un curseur.
Apres execution du bloc, aucune modifications n'a eu lieu.
Si je fais des bloc PL/SQL avec chacun un update sur une table, ca fonctionne.
Je pense que mon probleme vient du where current of cur_maj que j'utilise dans mes 2 update. Est-ce que le fait d'update le premier, modifie le curseur et ensuite plus dispnible pour le 2 update.( puisque si on refait le select de l'update, il ne serait plus contenu dedans)
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 declare cursor cur_maj is select p.statutproduit, r.CODEGUICHET from test_crm p, test_rib r where r.CODEGUICHET = 1 and p.statutproduit = r.CODEGUICHET for update of p.statutproduit, r.CODEGUICHET; nb_lg NUMBER :=0; date_debut DATE := sysdate; begin execute immediate('alter session set nls_date_format=''DD/MM/YYYY'''); for cur_t in cur_maj loop update test_crm p set p.statutproduit = 9 where current of cur_maj; update test_rib r set r.CODEGUICHET = '87000' where current of cur_maj; nb_lg := cur_maj%ROWCOUNT; dbms_output.put_line('TTTTTT- Nombre de lignes : '||nb_lg); end loop; dbms_output.put_line('- Nombre de lignes : '||nb_lg); end; /
J'ai également testé de mettre un commit, avant et apres le "end loop", sans succes.
Je fais peut etre fausse route, avez-vous des idees ?
Une derniere question, comment peut on savoir si un update s'est bien déroulé en pl/sql ? (en mode normale on a un 1 ligne mise a jour)
Merci d avance
Cordialement
Partager