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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.