[Résolu] Problème fonction PL/SQL
Bonjour à tous,
Je suis confronté à un petit problème de fonction PL/SQL sur Oracle, que je n'arrive pas à résoudre. J'ai lu en détail les tutoriaux sur le site ( l'URL http://sheikyerbouti.developpez.com/pl_sql ).
Configuration : Oracle 10g
Utilitaire de développement : SQL*Plus
Je travaille sur un mini-application qui gère une librairie.
Dans ma fonction j'utilise 3 tables :
- "Auteur" : liste des auteurs.
- "Livres" : liste des livres (la clé primaire étant l'ISBN)
- "Ecrire" : association 0,n - 0,n entre Auteur et Livres, dans le cas où un livre soit écrit par plusieurs auteurs.
Je souhaite que ma fonction retourne dans un seul champ varchar2(100) la liste des auteurs d'un ouvrage.
Voici le code de ma fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
CREATE OR REPLACE FUNCTION fo_auteurs_parlivre (plivre IN varchar2)
return varchar2 IS mesauteurs varchar2(100);
cursor moncurseur is SELECT aut_nom FROM auteur INNER JOIN ecrire ON aut_id = ecr_aut WHERE ecr_liv = plivre;
unauteur moncurseur%ROWTYPE;
i integer;
begin
i := 1;
for rec in moncurseur loop
if i <> 1 then
mesauteurs := mesauteurs || ', ';
end if;
fetch moncurseur into unauteur;
mesauteurs := mesauteurs || unauteur.aut_nom;
i := i + 1;
end loop;
return(mesauteurs);
end; |
La fonction se compile sans problème. Toutefois, lorsque je veux l'utiliser dans le contexte suivant...
Code:
SELECT liv_isbn, fo_auteurs_parlivre(liv_isbn) FROM livres
J'obtiens l'erreur suivante :
[1,1]: ORA-01001: invalid cursor
ORA-06512: at "DELPHI.FO_AUTEURS_PARLIVRE", line 13 (la ligne 13 étant fetch moncurseur into unauteur;.
Avez-vous une idée du problème ? J'ai eu beau le retourner dans tous les sens, rien n'y a fait :(