web-dev-qa-db-fra.com

Erreur Oracle PLS-00323: le sous-programme ou le curseur est déclaré dans une spécification de package et doit être défini dans le corps du package

Quelqu'un peut-il m'aider à mettre ma procédure pl/sql dans un package? J'ai essayé et j'ai du mal avec ça:

Voici ce que j'ai pour la spécification de mon paquet:

CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;

--

Ceci est mon corps de paquet où im courir dans les problèmes:

  CREATE OR REPLACE PACKAGE BODY film_pkg
IS
   PROCEDURE get_films (fname    IN     film.title%TYPE,
                        r_date      OUT film.release_date%TYPE,
                        dur         OUT film.duration%TYPE)
   AS
   BEGIN
      SELECT release_date, duration
        INTO r_date, dur
        FROM FILM
       WHERE title = fname;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         r_date := '';
         dur := '';
   END get_films;
END film_pkg;

si quelqu'un pouvait m'aider à réparer les erreurs, je l'apprécierais:

Error(4,11): PLS-00323: subprogram or cursor 'GET_FILMS' is declared in a package specification and must be defined in the package body
16
SqlNoob

Vos définitions de procédure d'en-tête et de corps ne correspondent pas 

Dans l'en-tête, vous avez:

PROCEDURE get_films(fname VARCHAR2);

Considérant que dans le corps:

PROCEDURE get_films(fname IN film.title%type, 
   r_date OUT film.release_date%type, dur OUT film.duration%type)

Vous avez probablement juste besoin de mettre à jour la définition d'en-tête avec les deux paramètres OUT supplémentaires?

Résumer  

  • Assurez-vous que la définition d'en-tête correspond à tous les paramètres de l'implémentation du corps (nombre de paramètres, noms de paramètres, ordre des paramètres et types de paramètres).
  • Selon le commentaire d'Alex, ne mélangez pas le type personnalisé (film.title%type) avec le type de base (VARCHAR2). Choisis l'un ou l'autre.
31
StuartLC

"le sous-programme ou le curseur 'M115_EDIT' est déclaré dans une spécification de package et doit être défini dans le corps du package"

J'ai eu cette erreur alors que je travaillais sur mon projet. La raison en était un nom de paramètre qui était dans la procédure définie dans le corps ne correspond pas au nom de paramètre correspondant dans le corps.

mes spécifications:

mon corps

mon paramètre market_code est différent dans le corps par rapport à la spécification où il est défini comme code_market_code.error est dû à cette différence. le problème mentionné ci-dessus.

deux paramètres clairement mentionnés dans votre corps implémentation de la procédure 'r_date' et 'dur' ne sont pas définis dans la spécification. L'erreur est due à cette différence entre le corps et la spécification.

" nom du paramètre qui était dans la procédure définie dans le corps ne correspond pas au nom du paramètre correspondant dans le corps."

0
Khang Dq