Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2007, 16h14   #1
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 103
Points : 18
Points : 18
Par défaut FOnction qui renvoit une table

Bonjour,

Je dois créer une fonction qui prend 3 paramêtres et qui renvoit une table qui contient les tuples qui satisfont à un critère. Cette fonction se trouve dans un package que voici :
Code :
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
SET SERVEROUTPUT ON
CREATE OR REPLACE PACKAGE GestionEtudiants AS
TYPE Type_Record IS RECORD
(
  Matricule ETUDIANTS.MATRICULE%TYPE,
  Nom ETUDIANTS.NOM%TYPE,
  Prenom ETUDIANTS.PRENOM%TYPE
);
TYPE Ma_Table IS TABLE OF Type_Record INDEX BY BINARY_INTEGER;
FUNCTION Rechercher(Matricule IN ETUDIANTS.MATRICULE%TYPE) RETURN ETUDIANTS%ROWTYPE;
FUNCTION RechercheMatricule(Matricule IN ETUDIANTS.MATRICULE%TYPE) RETURN NUMBER;
PROCEDURE Supprimer(Matricule IN ETUDIANTS.MATRICULE%TYPE);
FUNCTION Lister(AnneeSco IN HISTORIQUE.ANSCO%TYPE, Tendance IN GROUPES.TENDANCE%TYPE, AnneeEtude IN HISTORIQUE.SECETUD%TYPE) RETURN Ma_Table;
END GestionEtudiants;
/
CREATE OR REPLACE PACKAGE BODY GestionEtudiants AS
.....
FUNCTION Lister(AnneeSco IN HISTORIQUE.ANSCO%TYPE, Tendance IN GROUPES.TENDANCE%TYPE, AnneeEtude IN HISTORIQUE.SECETUD%TYPE)
RETURN Ma_Table
AS
v_test Ma_Table
BEGIN
SELECT ETUDIANTS.MATRICULE, ETUDIANTS.NOM, ETUDIANTS.PRENOM INTO v_test(0).Matricule, v_test(0).Nom, v_test(0).Prenom
FROM ETUDIANTS
WHERE ETUDIANTS.MATRICULE LIKE 'I28592';
RETURN v_test; 
EXCEPTION
  WHEN OTHERS THEN RAISE;
END Lister;
 
END GestionEtudiants;
/
J'ai enlevé les 3 premiére fonction/procedure qui fonctionnait.
Par contre dans la fonction Lister je n'arrive pas à sélectionner les lignes qui m'interesse et à les mettre dans Ma_Table.
Le corps de la fonction est en phase de test mais normalement je doit avoir plusieurs ligne dans la table que je renvoit donc je ferais soit un BULK COLLECT ou un CURSOR.
Si vous pouviez m'aider ??

Merci

Bonne journée.
Dimitri_87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2007, 17h33   #2
Invité régulier
 
Inscription : janvier 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 13
Points : 8
Points : 8
Perso, j'ai utilisé ça : http://www.oracle-base.com/articles/...unctions9i.php

Tu fais ta fonction du genre

RETURN ton_type PIPELINED AS
BEGIN
FOR i IN (SELECT blahblah...)
LOOP
PIPE ROW i;
END LOOP;

Et pour sélectionner le résultat de ta fonction :

SELECT * FROM TABLE(package.fonction(params))
R0cKW|LDeR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2007, 11h48   #3
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 103
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 103
Points : 18
Points : 18
Ok le problème est résolus. Je n'ai pas utilisé ta technique car je ne la comprenais pas bien donc je suis passé par un curseur pour récupérer ma sélection ensuite je met les tuples dans mon record via une boucle.
Dimitri_87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h24.


 
 
 
 
Partenaires

Hébergement Web