Oracle Error PLS-00323:子程序或游标在包规范中声明,必须在包体中定义

时间:2014-10-23 09:35:48

标签: sql oracle stored-procedures plsql packages

有人可以帮我把pl / sql程序放在包中吗?我已经尝试过,而且我正在努力奋斗:

这就是我的包装规格:

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

--

这是我的包体,我遇到了问题:

  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;

如果有人能帮我解决错误,我会很感激:

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

3 个答案:

答案 0 :(得分:31)

您的标题和正文程序定义与

不匹配

在标题中,您有:

PROCEDURE get_films(fname VARCHAR2);

而在身体中:

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

你可能只需要用另外两个OUT参数更新标题定义吗?

总结

  • 确保标头定义与主体实现的所有参数匹配(参数数量,参数名称,参数顺序和参数类型)
  • 根据Alex的评论,不要将自定义类型(film.title%type)与基本类型(VARCHAR2)混合搭配。选择其中一种。

答案 1 :(得分:0)

“子程序或游标'M115_EDIT'在包规范中声明,必须在包体中定义”

我在处理项目时遇到此错误。原因是正文中定义的过程中的参数名称与正文中的相应参数名称不匹配。

my specification:

my body

我的market_code参数在与规范中被定义为sub_market_code.error的规范相比时在主体中是不同的,因为这种差异。 我将规范中的sub_market_code参数更改为market_code,以便它与正文匹配,这解决了上述问题。

显然,在程序'r_date'和'dur'的正文实现中提到的2个参数未在规范中定义。错误是由于正文和规范之间的这种差异。

答案 2 :(得分:0)

在主体中定义的过程内的

参数名称”与主体中相应的参数名称不匹配。”