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; |
Partager