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

Comment boucler sur un curseur retourné par une fonction


Sujet :

SQL Oracle

  1. #1
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut Comment boucler sur un curseur retourné par une fonction
    Bonjour,

    Une fonction retourne un curseur, voici son entête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR REPLACE FUNCTION searchdocuments ()
       RETURN TYPES.documents_cursor

    Le script du type curseur est le suivant :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE OR REPLACE PACKAGE types
    AS
         TYPE documents_cursor IS REF CURSOR;	 
    END;

    Et l'utilisation de la fonction :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE
     
    retval TYPES.documents_cursor;   
     
    BEGIN
     
       retval := searchdocuments ();
     
    END;

    Mais je n'ai pas trouvé la bonne syntaxe pour parcourir la variable retval.

    Auriez vous une idée ?


    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Points : 167
    Points
    167
    Par défaut
    Je me rappel l'avoir fait, mais je n'ai pas l'exemple sous les yeux.

    Mais si je me souvient bien j'avais créer un record avec le même nom de champ que lors de la définition du curseur de la fonction.

    Sinon dans le même genre voici ce qu'on peu voir :

    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
     
    SQL> Declare
      2    -- déclaration du curseur
      3    CURSOR C_EMP IS
      4    Select
      5       empno
      6      ,ename
      7      ,job
      8    From
      9      EMP 
     10    ;
     11    -- variables d'accueil 
     12    LN$Num EMP.empno%Type ;
     13    LC$Nom EMP.ename%Type ;
     14    LC$Job EMP.job%Type ; 
     15  Begin  
     16    Open C_EMP ; -- ouverture du curseur
     17    Loop -- boucle sur les lignes
     18      Fetch C_EMP Into LN$Num, LC$Nom, LC$Job ; -- Lecture d'une ligne
     19      Exit When C_EMP%NOTFOUND ; -- sortie lorsque le curseur ne ramène plus de ligne
     20    End loop ;
     21    Close C_EMP ; -- fermeture du curseur
     22  End ;
     23  /
    Je pense que si tu déclare ton curseur dans une fonction et que tu l'ouvre dans une procédure appelante, tu peux expliciter tes variables, voir ton record :

    Déclaration du cursuer :
    Select colonne1 as ma_colonne1, colonne2 as ma_colonne2 from table;

    Avec colonne un varchar(40) et colonne2 un number(10)

    Tu fetch le curseur dans deux variables bien typées, ou un record typé correctement avec les noms ma_colonne1 et ma_colonne2.

    Enfin il me semble que j'avais fais comme ca, si tu t'en sors pas je retrouverais ca au boulo =)

  3. #3
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Juste avant de partir vendredi j'ai réussi à boucler sur le curseur en déclarant un objet RECORD contenant les différents champs retounés par le curseur puis en déclarant un curseur retournant ce RECORD.

    Et ensuite le traditionnel FETCH sur le curseur.

    Dès que je reviens au bureau le 3 janvier je tâcherai de poster le code de ce que j'ai fais, mais pour le moment je bulle

Discussions similaires

  1. [ksh] Boucler sur des lignes retournées par une requête SQL
    Par Cj_Dal dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 10/01/2013, 17h24
  2. Utiliser le curseur retourné par une fonction
    Par doudou0088 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 05/06/2009, 19h04
  3. Réponses: 2
    Dernier message: 11/04/2008, 23h23
  4. Réponses: 4
    Dernier message: 07/04/2007, 20h02
  5. Réponses: 11
    Dernier message: 31/10/2005, 17h59

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