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 :

UPDATE en PL/SQL ne fonctionne pas


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 17
    Points
    17
    Par défaut UPDATE en PL/SQL ne fonctionne pas
    Bonjour,

    J'ai créé un package contenant une simple procédure qui met à jour une colonne nom en se basant sur l'id de la ligne pour la retrouver (update MONDE set nom_monde='CHOSE' where monde_id=99854).

    Si j'execute cette procédure en SQL, donc:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BEGIN
    update MONDE set nom_monde='CHOSE' where monde_id=99854;
    commit;
    END;
    Tout marche nickel, par contre si je passe en PL/SQL:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    req_dyn varchar2(1000);
    nom_monde varchar2(1000);
    id_monde number(10);
     
    BEGIN
    req_dyn := 'update MONDE set nom_monde='':1'' where monde_id=:2';
    nom_monde := 'CHOSE';
    id_monde := 99854;
     
    execute immediate req_dyn using nom_monde , id_monde ;
    commit;
    END;
    J'obtiens une ORA-01006...

    Je suppose que c'est un paramètre de configuration qui n'est pas bon ou un droit ou....?

    Merci de votre aide...

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    Veuillez enlever les doubles cotes autour du premier paramètre :
    ":1" ==> :1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req_dyn := 'update MONDE set nom_monde=:1 where monde_id=:2';
    et réessayez.

  3. #3
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par puck78 Voir le message
    Bonjour,

    J'ai créé un package contenant une simple procédure qui met à jour une colonne nom en se basant sur l'id de la ligne pour la retrouver (update MONDE set nom_monde='CHOSE' where monde_id=99854).

    Si j'execute cette procédure en SQL, donc:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BEGIN
    update MONDE set nom_monde='CHOSE' where monde_id=99854;
    commit;
    END;
    Sauf que la c'est du PLSQL

    le PL c'est
    BEGIN
    ...

    END;


    Citation Envoyé par puck78
    Tout marche nickel, par contre si je passe en PL/SQL:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    req_dyn varchar2(1000);
    nom_monde varchar2(1000);
    id_monde number(10);
     
    BEGIN
    req_dyn := 'update MONDE set nom_monde='':1'' where monde_id=:2';
    nom_monde := 'CHOSE';
    id_monde := 99854;
     
    execute immediate req_dyn using nom_monde , id_monde ;
    commit;
    END;
    J'obtiens une ORA-01006...

    Je suppose que c'est un paramètre de configuration qui n'est pas bon ou un droit ou....?

    Merci de votre aide...
    Si tu tiens absolument a faire du SQL DYNAMIQUE ...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    declare
      v_monde_id       monde.monde_id%TYPE := 1000 ;
      v_monde           varchar2(20) :='CHOSE';
      LC$Requete       VARCHAR2(256) ;
    BEGIN
    LC$Requete:= 'UPDATE MONDE SET NOM_MONDE  = :2 WHERE monde_id = :1';
          EXECUTE IMMEDIATE LC$Requete USING v_monde ,v_monde_id;
    dbms_output.put_line(v_monde);
    END ;
    /

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut chr(39)
    je ne c pas si ca marche maintenant, mais à mon avis le probleme se resume a lemploi du double cote.
    pour utiliser du code dynamique peut etre ke tu peux utiliser ce code
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute immediate 'update MONDE set nom_monde= '||chr(39)||:1||chr(39)||' where monde_id=:2';
    39 etant le code ascii du cote.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Merci de votre aide, c'était bien les doubles cotes qui étaient en cause!

    Maintenant que vous me l'avez dit, le bug était évident...

    ps pour fatsora: le code que je vous ai mis là n'est pas le code réel, mais un extrait simplifié pour vous éviter la noyade. Dans le code réel, oui, j'ai vraiment besoin de faire des requêtes dynamique.

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

Discussions similaires

  1. Update et replace qui ne fonctionnent pas
    Par maysa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/02/2008, 13h47
  2. Union sql ne fonctionne pas ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 10
    Dernier message: 13/11/2007, 10h50
  3. [MySQL] Ma requête SQL ne fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 12h41
  4. [SQL] PB : Jointure SQL ne fonctionne pas..
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/09/2006, 14h03

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