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

Oracle Discussion :

[Oracle 9iR2][PL/SQL] EXECUTE IMMEDIATE USING


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut [Oracle 9iR2][PL/SQL] EXECUTE IMMEDIATE USING
    Bonjour,

    J'exécute une requête SQL dynamique à l'aide de EXECUTE IMMEDIATE et en utilisant le mot clef USING pour passer des variables, mais mon problème est que j'utilise deux fois un même paramètre dans la requête.
    Oracle me sort un message d'erreur :

    ORA-01008: Toutes les variables ne sont pas liées
    ORA-06512: à "PSCM.NPALIMTBPSCM01", ligne 37
    ORA-06512: à ligne 11



    Exemple requête :

    mySqlInsert :='INSERT INTO TABLEX (SELECT :1 FROM TABLEY a WHERE a.CODE=:1 AND a.PAYS=:2)';
    EXECUTE IMMEDIATE mySqlInsert USING myCode, myPays;
    COMMIT;
    Deux fois :1 pose problème !

    Je dois faire :

    mySqlInsert :='INSERT INTO TABLEX (SELECT :1 FROM TABLEY a WHERE a.CODE=:2 AND a.PAYS=:3)';
    EXECUTE IMMEDIATE mySqlInsert USING myCod, myCode, myPays;
    COMMIT;
    Une autre façon de procéder selon vous ? Je ne trouve pas cela propre...

    Merci pour votre aide !

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est comme ça. Les bind variables de l'execute sont toutes différentes pour lui. que tu lui mette :1, :1, :2 ou :a, :b, :a, ce sont 3 variables qu'il attend.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Notez aussi qu'une bind variable ne peut que remplacer un littéral, généralement dans une clause WHERE. Une bind variable ne peut pas remplacer un nom de colonne dans la liste des colonnes sélectionnées (entre le SELECT et le FROM).

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    Aïe ! On va faire avec... D'ailleurs, j'ai commencé ainsi !

    Pour le nom des colonnes ou tables, je concatène... Je ne sais pas si c'est bon, mais je vois pas comment faire autrement pour modifier le nom d'une table dynamiquement dans une requête SQL.

    Question bête, USING accepte combien de bind variables ?

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Pour avoir plus de flexibilité que EXECUTE IMMEDIATE, il faut utiliser la package DBMS_SQL (mais c'est plus difficile): http://sheikyerbouti.developpez.com/execute_immediate/

Discussions similaires

  1. [Oracle 9iR2][PL/SQL] Alias noms de tables
    Par mainecoon dans le forum SQL
    Réponses: 4
    Dernier message: 08/02/2007, 18h46
  2. [8i][PL/SQL] EXECUTE IMMEDIATE
    Par Bahan dans le forum SQL
    Réponses: 25
    Dernier message: 15/09/2006, 14h05
  3. [PL/SQL] EXECUTE IMMEDIATE et INSERT et RETURNING
    Par swirtel dans le forum Oracle
    Réponses: 2
    Dernier message: 18/04/2006, 09h25
  4. [PL/SQL] Execute immediate
    Par BiM dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/08/2005, 11h13
  5. [pl/sql] execute immediate
    Par Nadine dans le forum Oracle
    Réponses: 16
    Dernier message: 23/02/2005, 17h37

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