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 :

Requête SQL avec nested tables


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut Requête SQL avec nested tables
    Bonjour tout le monde!

    J'aurais besoin de votre aide sur le sujet suivant:

    J'ai une procédure avec quelques curseurs et je garde les résultats dans une variable de type TABLE OF x:

    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type x is record(...) ;
    type y is table of x;
    ma_var y;
    J'invoque ensuite une fonction en passant la variable du type que j'ai crée. my_func(ma_var)

    Ma question est: comment puis-je accéder aux valeurs de ma_var dans my_func?

    Je pourrais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOR i IN ma_var.FIRST .. ma_var.LAST
          LOOP
    ..
    END LOOP;
    mais j'ai besoin de faire un select distinct sur ma_var.

    J'ai testé avec un curseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     TYPE item_rec IS RECORD(item_id NUMBER(20));
     
     TYPE rc_distinct_items IS REF CURSOR RETURN item_rec;
     
     c_distinct_items rc_distinct_items;
     l_distinct_items item_rec;
    et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open c_distinct_items for select distinct from (ma_var);

    mais apparemment je ne pourrais pas utiliser ma_var dans un select.. :/

    Quelqu'un a une solution ?

  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
    Les types déclarés dans Pl/SQL (record pour exemple) ne sont pas connus pas le moteur SQL. Utilisez à la place un type objet déclaré dans la base en un type tableau de ces objets.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Bonjour mnitu.

    Merci pour votre réponse. Est-ce la seule solution? Je voudrais éviter de créer le type de données dans la BD. :/

  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
    Citation Envoyé par JLemon Voir le message
    ...Est-ce la seule solution? Je voudrais éviter de créer le type de données dans la BD. :/
    Très probablement que non. Quelle est la version d'Oracle que vous utilisez ? Pourriez-vous donner un petit exemple (code complet de la procédure) de ce que vous essayez d'accomplir ? Ca permettra d'éviter les malentendus.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Re-bonjour

    J'ai finalement réussi à faire ce que je voulais, en utilisant une fonction pipelined:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FUNCTION my_func_pipelined RETURN my_package.mon_type_tab
          PIPELINED
    J'ai ensuite utilisé un curseur pour trier les résultats:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OPEN c_distinct_items FOR
             SELECT DISTINCT item_id FROM TABLE(my_func_pipelined);


    Merci!

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

Discussions similaires

  1. Requête SQL avec trois tables
    Par reuqnas dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/04/2014, 01h10
  2. Requête SQL avec plusieurs tables
    Par salma.mathlouthi dans le forum Développement
    Réponses: 1
    Dernier message: 30/07/2013, 08h16
  3. Requête SQL avec création de table sous condition
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/11/2007, 08h58
  4. [SQL] Requête SQL avec 3 tables liées par la même relation
    Par lenstoi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/08/2007, 23h32
  5. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06

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