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 Developer Oracle Discussion :

Variable dans une requête


Sujet :

Sql Developer Oracle

  1. #1
    Membre confirmé Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Par défaut Variable dans une requête
    Bonjour,

    Je viens de changer de boulot, et je débute avec plsql-developer. Ma question va donc vous paraitre certainement très simple.
    Dans le service ou je bosse à présent, on va taper directement dans la base de donnée de la production (car les outils du fournisseur de logiciel ne permettent pas de corriger autrement les problèmes)
    Les requêtes sont toujours de cette forme (oui, pas sous forme de bloc, comme j'ai pu trouver dans les docs que j'ai pu lire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from <la table> where  nompat='XXXXXXXX' and dtnais='aaaammjj' and etat !='X';
    à partir de la, on récupère une valeur pour chercher les info et/ou modifier la base (n° interne du dossier, ...)
    On a donc la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from <autre_table> where nodossier='<n°dossier copier à la main>'  and nvl(etat,' ') != 'X';
    Ce n° de dossier est dans plusieurs requêtes ensuite.
    Et je me demandais s'il était possible de faire quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from <la table> where  nompat='XXXXXXXX' and dtnais='aaaammjj' and etat !='X'; 
    no_dossier:='xxxxxxxx';
    select * from <autre_table> where nodossier=no_dossier  and nvl(etat,' ') != 'X';
    Mettre la valeur de mon n° de dossier dans une variable pour ne pas me taper des copier/coller dans les requêtes.
    Autant vous dire que j'ai testé, et ça marche pas.
    D’où ma question ici, ayant cherché mais peut être pas la ou il faut.

    Merci de votre aide.

    Rémi.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 172
    Par défaut
    Bonjour,

    Je ne me souviens plus très bien la gestion des variables sous PL/SQL Developer, mais as-tu essayé d'utiliser des esperluettes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from <autre_table> where nodossier=&no_dossier and nvl(etat,' ') != 'X';
    Tu renseignes la valeur 'xxxxxxxx' que tu as récupérée précédemment.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 205
    Par défaut
    Tu proposes une solution avec PLSQL, mais j'ai l'impression qu'il est contraint de passer par un simple select.

    Une solution parmi d'autres toutes très ressemblantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select a.* 
    from <autre_table> a ,   
         (  select * from <la table> where  nompat='XXXXXXXX' and dtnais='aaaammjj' and etat !='X' )  b
    where a.nodossier= b.nodossier   and nvl(a.etat,' ') != 'X';

  4. #4
    Membre confirmé Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Par défaut
    Bonjour;
    Oui , je suis obligé de passer par select:
    je surligne et j’exécute. Ça permet de faire "moins de c.....". Ou au moins de réfléchir un peu plus entre deux.
    Pour en revenir à vos suggestions: J'ai tenté la solution de @vanagreg:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    no_dossier:='0000088371'
    select * from <ma_table> t where nodos= &no_dossier
    Mais j'ai une fenêtre qui s'ouvre me demandant de compléter la variable no_dossier. Ce n'est pas vraiment ce à quoi je m'attendais.

    Pour la solution de @tbc92, j'avoue que je ne comprend pas le principe, surtout si je veux réutiliser plusieurs fois ma variable no_dossier.
    Mais j'ai peut être mal interprété ta solution?

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 205
    Par défaut
    Dans la question initiale, je voyais l'utilisateur lancer une première requête, avec un nom d'individu, récupérer le n°dossier, puis lancer une 2ème requête, avec un copier/coller du n°dossier.
    Et ma solution permettait de faire ces 2 étapes en une seule, en mettant juste le nom de l'individu.

    Mais j'ai vu juste après que l'utilisateur, une fois qu'il a le n° dossier, il peut lancer différentes requêtes, et non une seule.
    Donc ce n'est pas adapté.

  6. #6
    Membre confirmé Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Par défaut
    Tu avais effectivement bien vu que je récupère le °de dossier par copier/coller, mais comme après je m'en sert dans plusieurs requêtes , je voulais utiliser une variable. ça évite les multiples recopies (et erreur de recopie)

  7. #7
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Bonjour

    il faut à priori passer par une variable PLSQL et non une variable SQLPLUS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var no_dossier varchar2(10)
     
    begin
     :no_dossier:='0000088371';
    end;
    /
     
    select * from <ma_table> t where nodos= :no_dossier

  8. #8
    Membre confirmé Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    Bonjour

    il faut à priori passer par une variable PLSQL et non une variable SQLPLUS
    Bonjour;
    Merci pour ton aide. A priori, ça ne passe pas:

    Nom : erreur_ora.png
Affichages : 364
Taille : 6,2 Ko

    J'ai fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var no_pat varchar2(10)
     
    begin
     :no_pat:='000xxxxxx';
    end;
    évidemment, le no-pat était un vrai n°)
    Ensuite, sélectionné les lignes, et exécuter les lignes.

    Et je m'aperçois que je ne vous ai pas donné la version de l'outil: PL/SQL Developer version 7.1.1.1339 25.42146

Discussions similaires

  1. Ecriture d'une variable dans une requête
    Par papilou86 dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 09h03
  2. Passer une variable dans une requête SQL
    Par Remedy dans le forum C++
    Réponses: 2
    Dernier message: 11/05/2006, 16h48
  3. [PL/SQL] [9i] Variables dans une requête
    Par ftrifiro dans le forum Oracle
    Réponses: 6
    Dernier message: 07/02/2006, 12h19
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  5. Passage de variable dans une requête
    Par zestrellita dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/09/2004, 13h27

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