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 :
La fonction se compile sans problème. Toutefois, lorsque je veux l'utiliser dans le contexte suivant...
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 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;
J'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT liv_isbn, fo_auteurs_parlivre(liv_isbn) FROM livres
[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
Partager