ERREUR fonctions paramétrées
Bonjour à tous,
j'ai un petit problème au niveau des fonctions paramétrées.
Pour un projet de base de données, où j'ai plusieurs tables , notamment les tables : personne , publication, et publie
Je dois créer une fonction
Code:
liste_publications(nom, prenom, annee_debut, annee_fin, categorie)
qui retourne la liste des articles publiés par les auteurs spécifiées par nom, prénom, pour les années spécifiées par annee_debut et annee_fin et appartenant aux catégories spécifiées par categorie. Vous préciserez les catégories que l'on peut spécifier.
si nom = “*” et prenom “*” on retourne la liste des articles quelque soit l'auteur pour les années spécifiées par annee_debut et annee_fin et appartenant aux catégories spécifiées par categorie.
si annee_debut = 0, on retourne la liste des articles des auteurs spécifiés par nom, prénom, quelquesoit l'année de début, pour l'année de fin spécifiée par annee_fin et appartenant aux catégories spécifiées par categorie.
si annee_fin = 0, on retourne la liste des publications des personnes spécifiés par nom, prénom, pour l'année de debut spécifiée par annee_debut, quelquesoit l'année de fin et appartenant aux catégories spécifiées par categorie.
si categorie = “*”, on retourne la liste des articles des auteurs spécifiés par nom, prénom, pour les années spécifiées par annee_debut et annee_fin.
J'ai donc vu la fonction comme ça :
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
| delimiter |
CREATE FUNCTION fct_liste_publications(in_nom varchar(50), in_prenom varchar(50), in_annee_debut varchar(50), in_annee_fin varchar(50), in_categorie varchar(10))RETURNS TEXT
DETERMINISTIC
BEGIN
# déclare une variable pour stocker le résultat
DECLARE i_liste_publi TEXT;
# déclare un curseur pour récupérer le résultat
DECLARE c_liste_publi CURSOR FOR
select distinct titre from publication Pub,publie Pu, personne Pe where Pub.id_publication=Pu.id_publication and Pe.id_personne=Pu.id_personne and nom=in_nom and prenom=in_prenom and date_publi>= in_annee_debut and date_publi<=in_annee_fin and categorie=in_categorie;
IF in_nom='*' and in_prenom='*' then
select distinct titre from publication Pub,publie Pu, personne Pe where Pub.id_publication=Pu.id_publication and Pe.id_personne=Pu.id_personne and date_publi>= in_annee_debut and date_publi<=in_annee_fin and categorie=in_categorie;
ELSEIF in_annee_debut=0 then
select distinct titre from publication Pub,publie Pu, personne Pe where Pub.id_publication=Pu.id_publication and Pe.id_personne=Pu.id_personne and date_publi<=in_annee_fin and categorie=in_categorie;
ELSEIF in_annee_fin=0 then
select distinct titre from publication Pub,publie Pu, personne Pe where Pub.id_publication=Pu.id_publication and Pe.id_personne=Pu.id_personne and date_publi>=in_annee_debut and categorie=in_categorie;
ELSEIF in_categorie='*' then
select distinct titre from publication Pub,publie Pu, personne Pe where Pub.id_publication=Pu.id_publication and Pe.id_personne=Pu.id_personne and nom=in_nom and prenom=in_prenom and date_publi>= in_annee_debut and date_publi<=in_annee_fin;
END IF;
# ouvre le curseur et place le résultat dans la variable i_liste_publi
OPEN c_liste_publi;
FETCH c_liste_publi INTO i_liste_publi;
CLOSE c_liste_publi;
# retourne le résultat
RETURN (i_liste_publi);
END |
delimiter; |
le problème est que j'ai cette erreur dans mysql
Code:
ERROR 1415 (0A000): Not allowed to return a result set from a function
Merci d'avance si vous pouvez m'aider, j'ai essayé de trouver des solutions sur le net mais en vain.