IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Problème fonction PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut [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 : 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;
    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
    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

  2. #2
    thg
    thg est déconnecté
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 46
    Points : 55
    Points
    55
    Par défaut
    Bonjour ,

    Pour ce type d'utilisation de cursor (curseur for), l'ouverture du curseur, le fetch , et la fermeture du curseur sont implicite ... Donc le "fetch" est en trop.

    Ex:

    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
     
     
    create or replace function testf return varchar2 is
     
    noms varchar2(4000);
    cursor moncurseur is select ename from emp;
     
    begin
     
    for rec in moncurseur loop
     
       noms := noms || ' ' || rec.ename;
     
    end loop;
     
     
    return noms;
     
    end;
    Hope this help ...

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Merci bien, ça fonctionne parfaitement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème renvoie de valeurs (Fonction Transact SQL)
    Par chicken92000 dans le forum Développement
    Réponses: 1
    Dernier message: 12/09/2008, 15h18
  2. Problème dans une fonction PL/SQL
    Par jnayna86 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/04/2008, 13h28
  3. problème appel à une fonction pl/sql
    Par tommey dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2007, 14h19
  4. Problème type DATE et fonctions PL/SQL
    Par craweb dans le forum PL/SQL
    Réponses: 7
    Dernier message: 25/02/2007, 18h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo