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

SQL Oracle Discussion :

Bind variable incluse dans une autre bind variable


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut Bind variable incluse dans une autre bind variable
    Bonjour !

    J'ai un souci avec une requête PL/SQL. Je simplifie le problème. J'ai une requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select utilisateur_id, jour, demijour from t_partiel P
    where P.utilisateur_id in (:liste)
    :liste est une requête comprenant aussi une bind variable. Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select utilisateur_id where id = :identifiant
    Au moment de l'exécution, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-01722: Nombre non valideORA-06512: à ligne 1
    La requête apparait ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select utilisateur_id, jour, demijour from t_partiel P
    where P.utilisateur_id in ('select utilisateur_id where id# = :identifiant')
    Le problème est que la sous-interrogation apparait entre quotes et n'est donc pas interprétée. J'ai même dû au passage supprimer la definition de :identifiant car :liste n'étant pas interprétée, :identifiant est introuvable dans la requête globale...

    Pour pallier ce problème, j'ai dû remplacer :liste par une variable PHP et là, ça marche, mais au détriment de la performance, car la requête globale est exécutée de nombreuses fois...

    Comment se débarasser de ces quotes sans passer par PHP ? Y a-t-il une solution SQL ?

    Merci d'avance !

    Fred

  2. #2
    Membre expérimenté Avatar de VinceTlse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 163
    Par défaut
    Tu peux éxécuter toute ta requete en SQL dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'SELECT utilisateur_id, jour, demijour FROM t_partiel P
    WHERE P.utilisateur_id IN (''' ||:identifiant||''')'

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut
    Merci de l'astuce, mais (si j'ai bien compris) ça ne peut pas fonctionner, car :liste peut prendre des formes diverses, avec une bind variable ou non... Là, c'est :identifiant, mais parfois, ça n'apparait pas...

    Sinon j'ai essayé avec : liste, mais ça ne passe pas.

    la requête est la même en entrée qu'en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT utilisateur_id, jour, demijour FROM t_partiel P
    WHERE P.utilisateur_id IN (''' || :liste || ''')

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut
    Ces deux requêtes sont écrites en PL.
    Est-il possible d'exécuter la première et "d'injecter" le résultat dans la seconde ?

    Je précise que cette requête globale est définie comme curseur dans ma requête PL.

    Merci d'avance !

    Fred

Discussions similaires

  1. Appeler dans une requête des variables définies dans une macro
    Par piflechien73 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/08/2009, 15h12
  2. [POO] Retourner une variables contenu dans une autre méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 6
    Dernier message: 15/10/2007, 16h29
  3. variable incluse dans une propriété
    Par aviaur dans le forum ANT
    Réponses: 1
    Dernier message: 24/10/2006, 19h31
  4. Récup variable Javascript dans une autre page
    Par michelle1000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/09/2006, 06h58
  5. [Conception] récupération d'une variable php dans une autre page
    Par vali7 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/01/2006, 11h19

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