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
PROCEDURE raz_pool_UOC IS
 
CURSOR c_all_users is
SELECT * FROM utilisateur_ora
WHERE REGEXP_LIKE(UTO_USR_NAME, '^UOC[0-9]{3}$') 
FOR UPDATE;
 
TraceLog varchar2(150);
newpasswd varchar2(30);
Requete varchar2(150);
sec_en_plus number:=0;
v_user_name c_all_users%ROWTYPE;
 
BEGIN
  OPEN c_all_users;
  LOOP
  FETCH c_all_users into v_user_name;
 
   TraceLog := 'v_user_name.UTO_USR_NAME=*'||v_user_name.UTO_USR_NAME||'*';
   PKG_COM.Ecrire_trace( PKG_COM.INF,
                            'Test raz_pool_UOC',
                            SUBSTR(TraceLog,1,300),
                            '',
                            'PKG_OTP.raz_pool_UOC');
    sec_en_plus:=sec_en_plus+1;
    newpasswd:=pkg_otp.CreateRandomPassword;
  -- raz de la table UTILISATEUR_ORA
    UPDATE utilisateur_ora 
    set UTO_PWD_GPL=newpasswd, UTO_JAN_SEQ=null, UTO_STA='LIBRE', 
    UTO_DATE_STATUT=sysdate+(sec_en_plus/86400), UTO_ID_ORA=null, UTO_ID_THREAD=null
    WHERE CURRENT OF c_all_users;
 
  -- raz pwd Oracle, unlock au cas ou 
    Requete:='ALTER USER '||v_user_name.UTO_USR_NAME||' ACCOUNT UNLOCK';
    Execute immediate Requete;
    Requete:='ALTER USER '||v_user_name.UTO_USR_NAME||' IDENTIFIED BY '||newpasswd;
    Execute immediate Requete;
  END LOOP;
  CLOSE c_all_users;
  COMMIT;
  EXCEPTION
  WHEN OTHERS THEN
     PKG_COM.Ecrire_trace( PKG_COM.ERR,
                           SUBSTR(SQLERRM,1,300),
                           SUBSTR(Requete,1,300),
                           'OTHERS - RAZ pool UOC',
                           'PKG_OTP.raz_pool_UOC');
END raz_pool_UOC;
D'ou provient cette erreur ? Lors de l'execution de la proc un seul tuple est bel et bien modifié.

Merci pour votre aide