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.

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;
/
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)

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