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 :

PLSQL qui retourne un select


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut PLSQL qui retourne un select
    Bonjour,

    Je n'arrive pas à faire une procédure/fonction simple qui me retourne un select.


    En fait dans ma db je dispose d'une table recensent l'ensemble des tables de ma db, et j'obtiens le nom avec la requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T_TABLE_ORIGINE
     FROM TABLE_ORIGINE
    WHERE ID_TABLE_ORIGINE = 3
    Une fois obtenu le résultat, je vaux effectuer un select sur la table retourner par la requêtes précédente....je n'arrive pas à comprendre comment obtenir cela en store pro....

    Je tente des choses de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE FUNCTION "SCOTT"."TEST"
    (x IN INT)
     
    DECLARE
    nom_table := SELECT T_TABLE_ORIGINE
     FROM TABLE_ORIGINE
    WHERE ID_TABLE_ORIGINE = x
     
    IS
    BEGIN
      return SELECT * FROM nom_table
    END;
    Je sais que je suis loin du compte, mais si vous pouviez m'orienter.

    Merci.

  2. #2
    Membre éclairé Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE OR REPLACE FUNCTION "SCOTT"."TEST" (x IN INT) RETURN VARCHAR2
    IS
       nom_table TABLE_ORIGINE.T_TABLE_ORIGINE%TYPE;
    BEGIN
       SELECT T_TABLE_ORIGINE
       INTO nom_table
       FROM TABLE_ORIGINE
       WHERE ID_TABLE_ORIGINE = x;
       RETURN nom_table;
    END;

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Merci de la rapidité

    Mais cela ne réponds qu'a la moitié de ma question, si je suis le raisonnement, je devrais compléter par quelque chose comme ceci

    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
     
    CREATE OR REPLACE FUNCTION "SCOTT"."TEST" (x IN INT) RETURN VARCHAR2
    IS
       nom_table TABLE_ORIGINE.T_TABLE_ORIGINE%TYPE;
     
    BEGIN
       SELECT T_TABLE_ORIGINE
       INTO nom_table
       FROM TABLE_ORIGINE
       WHERE ID_TABLE_ORIGINE = x;
     
     t_name_one nom_table.T_NAME1%TYPE;
     t_name_two nom_table.T_NAME2%TYPE;
     
       SELECT T_NAME1,T_NAME2
       INTO t_name_one,t_name_two
       FROM nom_table; 
     
       RETURN t_name_one,t_name_two;
    END
    ;
    Mais la déclaration de mes nouvelles variables sont incorrectes !

    Merci de votre aide.

  4. #4
    Membre éclairé Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Par défaut
    Attention : tes déclarations de type doivent être dans un bloc DECLARE, soit un nouveau soit après le IS avec l'autre déclaration.

    Et une fonction ne peut retourner qu'une et une seule valeur.

    Donc soit tu fais une fonction générique qui pour un id renvoi un nom et tu appelles 3 fois ta fonction dans ton code, soit tu fais une procédure qui peut retourner plusieurs valeurs.

  5. #5
    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
    Probablement vous cherchez quelque chose comme ça:
    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
     
    Create Or Replace Function ref_crs (
      p_id In table_origine.id_table_origine%Type
    ) Return sys_refcursor Is
      l_t_table_origine        table_origine.t_table_origine%Type;
      l_rc                     sysrefcursor;
    Begin
      Select t_table_origine
        Into l_t_table_origine
        From table_origine
       Where id_table_origine = p_id;
      -- 
      Open rc for 'Select * from '||l_t_table_origine;
      Return rc;
      --
    End;
    /
    Lisez aussi le tutoriel du PL/SQL si vous voulez écrire du code en PL/SQL.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    SUPER

    J'ai rectifié une erreur ou deux dû à la nomenclature mais c'est exactement ça.

    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
     
    CREATE OR REPLACE FUNCTION "SCOTT"."REF_CRS" (
      p_id IN table_origine.id_table_origine%Type
    ) RETURN sys_refcursor 
    IS
      l_t_table_origine table_origine.t_table_origine%Type;
      l_rc  SYS_REFCURSOR;
    Begin
      SELECT t_table_origine
        INTO l_t_table_origine
        FROM table_origine
       WHERE id_table_origine = p_id;
      --
      Open l_rc FOR 'Select * from '||l_t_table_origine;
      RETURN l_rc;
      --
    End;
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/03/2009, 11h20
  2. select qui retourne que le premier element
    Par sallemel dans le forum Hibernate
    Réponses: 6
    Dernier message: 12/12/2008, 17h40
  3. un SELECT qui retourne plus de ligne que la table
    Par gomodo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/10/2007, 14h17
  4. Faire un Select qui retourne dans un certain ordre
    Par Rodie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2007, 22h29
  5. procedure stoquee qui retourne un "select"
    Par zerovolt dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/03/2005, 17h02

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