Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 16h45   #1
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Par défaut ORA-00904 sur un appel de procedure ?

Bonjour tout le monde;
Voici ma procédure qui compile nikel-chrome :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
PROCEDURE debloque_user(p_nom_user IN VARCHAR2) IS
Requete varchar2(250);
v_ddl_cmd varchar2(4000);
v_new_pwd varchar2(30); 
 
BEGIN
  Requete:='ALTER USER '||p_nom_user||' ACCOUNT UNLOCK';
  Execute immediate Requete;
 
  v_new_pwd := pkg_otp.CreateRandomPassword;
  Requete:='UPDATE utilisateur_ora SET UTO_PWD_GPL='||v_new_pwd||' WHERE UTO_USR_GPL='||p_nom_user||'';
  Execute immediate Requete;
  Requete:='ALTER USER '||p_nom_user||' IDENTIFIED BY '||v_new_pwd||'';
  Execute immediate Requete;
  COMMIT;
 
END debloque_user;
Or lorsque je la teste :
Code :
1
2
 
execute pkg_otp.debloque_user('USER001');
J'obtiens l'erreur :
Code :
1
2
3
4
5
6
7
8
9
10
 
Erreur commençant à la ligne 10 de la commande :
execute pkg_otp.debloque_user('USER001')
Rapport d'erreur :
ORA-00904: "USER001" : identificateur non valide
ORA-06512: à "USER.PKG_OTP", ligne 158
ORA-06512: à ligne 1
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Un desc de la table UTILISATEUR_ORA :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Nom             NULL     Type              
--------------- -------- ----------------- 
UTO_SEQ         NOT NULL NUMBER(38)        
UTO_USR_GPL              VARCHAR2(50 CHAR) 
UTO_PWD_GPL              VARCHAR2(30 CHAR) 
UTO_TYP_USR              VARCHAR2(30 CHAR) 
UTO_USR_NAME    NOT NULL VARCHAR2(8)       
UTO_JAN_SEQ              NUMBER(38)        
UTO_STA         NOT NULL VARCHAR2(30)      
UTO_DATE_STATUT          TIMESTAMP(6)      
UTO_ID_ORA               NUMBER(10)        
UTO_ID_THREAD            NUMBER(10)
Je ne comprends pas, je lui donne bien un varchar2 en parametre. Les noms de colonnes sont corrects.
Help !
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h56   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Prenez l'habitude de regarder les ordres SQL que vous générez avec dbms_output, vous trouverez rapidement l'erreur.

Au passage, la partie UPDATE utilisateur_ora n'a pas besoin d'être réalisée en SQL dynamique, vous devriez l'écrire ainsi :
Code :
1
2
3
UPDATE utilisateur_ora
   SET UTO_PWD_GPL = v_new_pwd
 WHERE UTO_USR_GPL = p_nom_user;
Oracle peut valider cette commande à la compilation, et utilisera naturellement des variables liées.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h00   #3
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
En fait il manquait des triple cote pour encadrer les strings à updater au niveau de SET = et WHERE =

Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h33   #4
Membre éclairé
 
Inscription : novembre 2002
Messages : 533
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 533
Points : 359
Points : 359
Citation:
Envoyé par Moostiq Voir le message
En fait il manquait des triple cote pour encadrer les strings à updater au niveau de SET = et WHERE =

ou encore mieux

Code :
1
2
 Requete:='UPDATE utilisateur_ora SET UTO_PWD_GPL=:1 WHERE UTO_USR_GPL= :2';
  Execute immediate Requete USING v_new_pwd, p_nom_user;
__________________
PpPool
PpPool est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h01.


 
 
 
 
Partenaires

Hébergement Web