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

Oracle Discussion :

[PL/SQL] Traitement d'un curseur dans une fonction


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 172
    Points : 100
    Points
    100
    Par défaut [PL/SQL] Traitement d'un curseur dans une fonction
    Salut,

    je dois exécuter une requete SQL dans une fonction (ce qui me retournera un curseur) et boucler sur le curseur retourné pour créer une nouvelle requete SQL. J'ai essayé pas mal de truc mais y a toujours un probleme.
    Voici où j'en suis :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
      FUNCTION fc_getarbreconsultable (pi_prefixe IN re_region.re_prefixe%TYPE)
        RETURN ref_cursor
      AS
        cur_rubrique	ref_cursor;                  -- curseur pour retourner les rubriques
        nbrubcons		NUMBER;
        i				NUMBER:=0;
        nbrows	 		NUMBER;
        req        		VARCHAR2 (500); 			-- variable pour construction de la requete
     
     
        CURSOR cur_rubcons IS SELECT ru.ru_id, ru.ru_idpere, ru.ru_libelle, ru.ru_niveau, ru.ru_lien, ru.ru_type, ru.ru_magasin, ru.ru_bg, ru.ru_bd
    						FROM ru_rubrique ru, dr_droit dr, re_region re
    						WHERE dr.ru_id = ru.ru_id 
    						AND ru.ru_id = '2'
    						AND re.re_prefixe = pi_prefixe 
    						AND dr.re_id = re.re_id
    						--AND ru_consultable = '1'
           					ORDER BY ru_bg ASC;
     
        rubrique			ref_cursor;
     
        BEGIN
    	    req := 'SELECT ru.ru_id, ru.ru_idpere, ru.ru_libelle, ru.ru_niveau, ru.ru_lien, ru.ru_type, ru.ru_magasin ';
    	    req := req || 'FROM ru_rubrique ru, dr_droit dr, re_region re ';    
    	    req := req || 'WHERE ru.ru_id = dr.ru_id AND re.re_prefixe = ''' || pi_prefixe || ''' AND dr.re_id = re.re_id AND (';
     
    --nbrubcons := cur_rubcons%ROWCOUNT;
     
    	    -- boucle sur toutes les rubriques consultables
    	    --WHILE cur_rubcons IS NOT NULL
     
    	    FOR rubrique IN cur_rubcons
    		--Open cur_rubcons ; -- ouverture du curseur		   
    	    LOOP
        		--fetch cur_rubcons into rubrique;
        		--exit when rubrique%notfound;	
     
        		i := i+1;    
    	    	req := req || '(ru.ru_bg <= ' || rubrique.ru_bg || ' AND ru.ru_bd >= ' || rubrique.ru_bd || ')';
    	    	IF i < nbrubcons THEN
    	    		req := req || ' OR ';
    	    	END IF;
     
    			-- si il s'agit de la derniere rubrique, on n'ajoute pas le OR
    			/*IF (rubrique IS NOT NULL) THEN
    				req := req || ' OR ';
    			END IF;*/
    	    END LOOP;
    		--CLOSE cur_rubcons ;
    	    req := req || ') ORDER BY ru.ru_bg ASC';      
     
     
        OPEN cur_rubrique
         FOR req;
     
        RETURN cur_rubrique;
    END fc_getarbreconsultable;
    alors plusieurs choses :
    - si j'essaie de faire un nbrubcons := cur_rubcons%ROWCOUNT; ça plante. Comment je peux connaitre le nombre de lignes du resultat de la premiere requete SQL ?
    - je n'arrive pas à utiliser fetch cur_rubcons into rubrique; avec un message d'erreur disant qu'il ne peut pas mettre la valeur courante du curseur dans la variable rubrique.
    - si j'essaie de faire IF (rubrique IS NOT NULL) j'ai une erreur disant que IS NOT NULL ne peut s'appliquer sur rubrique. Comment je peux connaitre le dernier enregistrement du curseur ?
    - est ce que cette méthode est correcte pour faire ce que j'ai à faire ou y a t il une meilleure façon de procéder ?

    Bon ça fait deja pas mal de question ! désolé je débute en PL/SQL (et j'ai l'impression que je commence pas par le plus facile... )

    Merci d'avance

    Thomas

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Jetez un coup d'oeil à cet article.

    http://sheikyerbouti.developpez.com/...record_set.htm

Discussions similaires

  1. Curseur dans une Fonction
    Par oxino dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/07/2010, 10h55
  2. Réponses: 1
    Dernier message: 06/08/2007, 11h02
  3. Retourné resultat curseur dans une fonction
    Par L8O8L dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/06/2007, 22h09
  4. PL/SQL :Retourner un curseur dans une procédure
    Par madina dans le forum PL/SQL
    Réponses: 1
    Dernier message: 24/05/2006, 17h36
  5. Obtenir la position du curseur dans une Image
    Par bastoune dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/11/2003, 21h02

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