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 :

Fonction : référencer un paramètre saisi interactivement par l'utilisateur


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut Fonction : référencer un paramètre saisi interactivement par l'utilisateur
    Bonjour tout le monde,

    J'ai créée une procédure stockée utilisant en paramètre une valeur saisie par l'utilisateur.
    Cette valeur est déclarée dans un .sql qui appelle cette fonction.
    Mon problème est que je n'arrive pas, dans le .sql, à référencer cette valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* Fonction qui retourne le nombre de personnes ayant un job passe en parametre. */
    CREATE OR REPLACE FUNCTION func_nb_job (v_s_job IN VARCHAR2) RETURN NUMBER IS
    v_nb_job number;
    BEGIN
            SELECT count(*) INTO v_nb_job FROM emp WHERE job=v_s_job;
            return v_nb_job;
    END;
    /

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* Appel de la fonction avec saisie interactive du paramètre */
    set serveroutput on;
     
    DECLARE
            v_nb_job NUMBER;
    BEGIN
            v_nb_job := func_nb_job('&METIER'); /* Saisie intéractive du paramètre METIER */
            dbms_output.put_line('Le metier ' || ' est exerce par ' || v_nb_job || ' personnes.');
    END;
    /
    Au lieu de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbms_output.put_line('Le metier ' || ' est exerce par ' || v_nb_job || ' personnes.');
    je voudrais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbms_output.put_line('Le metier ' || '&METIER' || ' est exerce par ' || v_nb_job || ' personnes.');
    mais si je fais ça, il y aura deux saisies interactives par l'utilisateur car j'utilise deux fois '&METIER'.

    Voilà, c'est tout... ça a l'air bête mais je plante sur ce problème.

    Je sais que je pourrais contourner le problème en mettant le résultat dans la fonction mais ce n'est pas ce que je cherche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbms_output.put_line('Le metier ' || 'v_s_job' || ' est exerce par ' || v_nb_job || ' personnes.');

    Par avance merci pour vos réponses.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Avoiding Unnecessary Prompts for Values
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.put_line('Le metier ' || '&&METIER' || ' est exerce par ' || v_nb_job || ' personnes.');

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Génial, ça marche

    Un gros merci à toi mnitu!

    [EDIT]

    Ah non, finalement ça ne marche que la première fois car le && crée une persistance dans les paramètres

    Voici mon nouveau code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set serveroutput on
    set verify off
    set feedback off
     
    DECLARE
            v_nb_job NUMBER;
    BEGIN
            v_nb_job := func_nb_job('&METIER');
            dbms_output.put_line('Le metier ' || '&&METIER' || ' est exerce par ' || v_nb_job || ' personnes.');
    END;
    /
    Et voici le résultat sous SQL*Plus dans une nouvelle session.
    La première fois il me demande deux fois de saisir une valeur puis, si je relance, il réutilise une ancienne saisie et pas forcément la bonne (voir les select plus bas). Alors là, j'ai du mal à comprendre.

    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
    SQL> @pl05
    Enter value for metier: CLERK
    Enter value for metier: MANAGER
    Le metier MANAGER est exerce par 4 personnes.
    SQL> @pl05
    Le metier MANAGER est exerce par 3 personnes.
    SQL> select count(*) from emp where job='CLERK';
     
      COUNT(*)
    ----------
             4
    SQL> select count(*) from emp where job='MANAGER';
     
      COUNT(*)
    ----------
             3

Discussions similaires

  1. Afficher tableaux avec des saisies faite par l'utilisateur
    Par mambodiandra dans le forum Débuter
    Réponses: 5
    Dernier message: 25/02/2013, 09h45
  2. Réponses: 0
    Dernier message: 30/03/2010, 20h07
  3. [PHP 5.2] Fonction file_get_contents et paramètre maxlen par défaut
    Par Bisûnûrs dans le forum Langage
    Réponses: 6
    Dernier message: 17/08/2009, 12h33
  4. Filtrer une Listbox en fonction d'informations saisies par l'utilisateur
    Par navorinco dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/05/2009, 17h30
  5. Réponses: 3
    Dernier message: 21/12/2005, 11h55

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