IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

ORA-00904 sur un appel de procedure ?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut ORA-00904 sur un appel de procedure ?
    Bonjour tout le monde;
    Voici ma procédure qui compile nikel-chrome :

    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
     
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute pkg_otp.debloque_user('USER001');
    J'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    En fait il manquait des triple cote pour encadrer les strings à updater au niveau de SET = et WHERE =


  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impdp Procedure ou function 10.2.0.4 Error ORA-00904
    Par wattman dans le forum Import/Export
    Réponses: 0
    Dernier message: 16/09/2011, 09h02
  2. Réponses: 8
    Dernier message: 11/11/2008, 17h33
  3. ORA-00904: invalid identifier sur le last query
    Par decksroy dans le forum Forms
    Réponses: 4
    Dernier message: 24/01/2008, 12h03
  4. ora-00904 sur select function
    Par archeoracle dans le forum Administration
    Réponses: 7
    Dernier message: 31/08/2007, 17h11
  5. [Designer 10.1.2.0.2] ORA-00904 sur l'EXPORT
    Par star dans le forum Designer
    Réponses: 2
    Dernier message: 07/03/2006, 02h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo