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 :

Question concernant l'erreur PLS-00307 quand la clause RETURN ne figure pas dans la définition d'un Cursor


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut Question concernant l'erreur PLS-00307 quand la clause RETURN ne figure pas dans la définition d'un Cursor
    Bonjour à tous,

    Version Oracle: Enterprise Edition Release 11.2.0.1.0 - 64bit
    OS: Linux Fedora Core 17 (X86_64)


    J'ai une question concernant la déclaration et la définition des Explicit Cursors. D'après la documentation en ligne

    http://docs.oracle.com/cd/E11882_01/...c.htm#BABHEBAI

    On peut très bien d'abord déclarer un Cursor et ensuite, toujours dans le même bloc PL/SQL le définir complètement avec le SELECT qui va avec.

    En se basant sur l'exemple 6-5 du lien ci-dessus, j'ai essayé le bloc 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
    19
    20
    21
    22
    23
     
    SQL> DECLARE
      2      CURSOR c1 RETURN hr.employees%ROWTYPE; -- Ici je déclarer le Cursor
      3      CURSOR c1 IS                           -- Ici je définie le Cursor
      4          SELECT *
      5          FROM hr.employees
      6          WHERE department_id = 100;
      7  BEGIN
      8      FOR emp In c1 LOOP
      9          sys.dbms_output.put_line(emp.employee_id);
     10      END LOOP;
     11  END;
     12  /
        FOR emp In c1 LOOP
                   *
    ERROR at line 8:
    ORA-06550: line 8, column 16:
    PLS-00307: too many declarations of 'C1' match this call
    ORA-06550: line 8, column 5:
    PL/SQL: Statement ignored
     
     
    SQL>
    Comme vous constatez, d'après oracle la déclaration et définition de C1 est ambigue puisque j'ai enlevé la clause RETURN hr.employees%ROWTYPE dans la définition. Par contre si vous regardez bien l'exmple de oracle dans le lien que j'ai donné ci-dessus, j'ai procédé exactement (enfin, il me semble ) comme la documentation (regardez le cursor c3 dans Example 6-5 dans le lien que j'ai donné). Du coup, je n'arrive pas à trouver mon erreur.

    Je voudrais demander de bien vouloir m'éclairer sur ce problème.
    Cordialement,
    Dariyoosh

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Il se trouve que le code d'Oracle ne marche pas non plus. Si, dans le corps du bloc, vous appelez le curseur, vous aurez aussi une erreur.

    Mais j'ai du mal à trouver une raison valable pour effectuer la déclaration et la définition d'un curseur en 2 étapes séparées, alors qu'on est dans le même bloc.
    (Alors que le déclarer dans l'en-tête d'un paquetage, et le définir dans le corps, ça ça a du sens).
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Bonjour,


    Merci beaucoup pour votre retour,

    Citation Envoyé par Pomalaix Voir le message
    Il se trouve que le code d'Oracle ne marche pas non plus. Si, dans le corps du bloc, vous appelez le curseur, vous aurez aussi une erreur.

    Mais j'ai du mal à trouver une raison valable pour effectuer la déclaration et la définition d'un curseur en 2 étapes séparées, alors qu'on est dans le même bloc.
    (Alors que le déclarer dans l'en-tête d'un paquetage, et le définir dans le corps, ça ça a du sens).
    Oui, d'ailleurs moi-même j'étais surpris et à vrai dire, faire ça dans un mêm bloc PL/SQL, je ne vois pas du tout l'intérêt, c'est pour ça que juste par curiosité j'ai voulu faire un teste, histoire de voir comment ça marche

    Citation Envoyé par Pomalaix Voir le message
    Il se trouve que le code d'Oracle ne marche pas non plus. Si, dans le corps du bloc, vous appelez le curseur, vous aurez aussi une erreur.
    Justement, c'est étrange, ça m'étonnerait qu'ils fassent ce genre d'erreur dans la doc

    Bizarre !!
    Cordialement,
    Dariyoosh

  4. #4
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je ne vois pas non plus dans quel cas ce serait utile.
    Justement, c'est étrange, ça m'étonnerait qu'ils fassent ce genre d'erreur dans la doc
    Qu'il y ait une erreur sur quelque chose que personne n'utilise et dont personne ne voit l'interêt, moi ça ne m'étonne pas trop

    Il peut y avoir une fonctionnalité qui était utile dans le passé, et qui ne fonctionne plus. Et vu que personne ne l'utilise, personne n'a remonté un bug.

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il suffit de lire avec attention l'exemple où pointe votre lien pour comprendre l'erreur que vous avez fait.
    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
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> DECLARE
      2     CURSOR c1 RETURN hr.employees%ROWTYPE;     -- Ici je déclarer le Cursor
      3     CURSOR c1 RETURN hr.employees%ROWTYPE IS   -- Ici je définie le Cursor
      4       SELECT *
      5         FROM hr.employees
      6        WHERE department_id = 100;
      7  BEGIN
      8    FOR emp IN c1 LOOP
      9       sys.dbms_output.put_line(emp.employee_id);
     10    END LOOP;
     11  END;
     12  /
     
    PL/SQL procedure successfully completed
     
    SQL>

  6. #6
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut lire avec attention
    Citation Envoyé par dariyoosh Voir le message
    regardez le cursor c3 dans Example 6-5 dans le lien que j'ai donné
    @mnitu
    Ton exemple correspond à 'Define c1 repeating return type' et non pas à 'Define c3 omitting return type'
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    @pachot
    Le c3 ne peut pas fonctionner.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/04/2015, 20h36
  2. Une question concernant CREATE PUBLIC DATABASE LINK et l'erreur ORA-12154
    Par dariyoosh dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 18/11/2009, 16h13
  3. Réponses: 3
    Dernier message: 16/04/2009, 23h01
  4. question sur les erreurs de compilation
    Par vince3320 dans le forum C
    Réponses: 5
    Dernier message: 19/04/2004, 11h34
  5. Question concernant l'API "WaitforSingleObject
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/03/2003, 07h26

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