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 :

Utilisation d'une variable pour un IN en PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut Utilisation d'une variable pour un IN en PL/SQL
    Bonjour,

    Je n'ai pas de souci pour créer une fonction en PL/SQL avec des arguments sous forme de chaînes ou de nombres (extraits)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION mafonction (p_1 IN INTEGER, p_2 IN VARCHAR2) 
    RETURN VARCHAR2 IS
    cursor moncurseur (c_1 integer, c_2 varchar2) IS SELECT A, B, C FROM matable
    WHERE A=c_1 AND B=c_2;
    ...
    FOR vc1 IN moncurseur(p_1, p_2) LOOP
    ...

    Par contre, je n'arrive pas à trouver dans la doc Oracle comment faire pour que mon argument c_2 soit une liste utilisable avec une syntaxe IN au lieu d'un simple =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION mafonction (p_1 IN INTEGER, p_2 IN ????) 
    RETURN VARCHAR2 IS
    cursor moncurseur (c_1 integer, c_2 ????) IS SELECT A, B, C FROM matable
    WHERE A=c_1 AND B IN c_2;
    ...
    FOR vc1 IN moncurseur(p_1, p_2) LOOP
    ...


    Est-ce que quelqu'un a une réponse ou un lien vers une doc qui explique ce genre de syntaxe ?

  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
    Pour quelle version d'Oracle ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut
    Oracle 10g

  4. #4
    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
    Voilà un example
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> set serveroutput on
    SQL> 
    SQL> create or replace procedure foo (
      2    p_list_emp  In sys.odcivarchar2list
      3  ) Is
      4  Begin
      5    For enr In (Select t.first_name
      6                  From hr.employees t
      7                  Where t.job_id in (Select column_value
      8                                       From Table(p_list_emp)
      9                                    )
     10                )
     11    Loop
     12      dbms_output.put_line(enr.first_name);
     13    End Loop;
     14  End;
     15  /
     
    Procedure created
    SQL> declare
      2    l_list sys.odcivarchar2list := sys.odcivarchar2list('AC_MGR','IT_PROG','ST_CLERK');
      3  begin
      4    foo(l_list);
      5  end;
      6  /
     
    Shelley
    Diana
    Valli
    David
    ... 
    PL/SQL procedure successfully completed
     
    SQL>
    Et une autre téchnique est binding in-lists in 10g

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Par défaut
    Merci,

    Je vais regarder.
    Mais étrange qu'un truc qui paraît si simple puisse se transformer en usine à gaz.

  6. #6
    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
    Lisez aussi Varying in lists avant de parlez de usine à gaz.

Discussions similaires

  1. [XL-2007] Utilisation d'une variable pour appel à des procédures
    Par Tetaye dans le forum Excel
    Réponses: 1
    Dernier message: 16/04/2015, 11h48
  2. Réponses: 1
    Dernier message: 17/05/2009, 19h40
  3. Réponses: 9
    Dernier message: 16/02/2007, 15h10
  4. Utiliser une variable pour stocker les noms d'objets.
    Par en_gel_ho dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2007, 16h44
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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