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



有人能帮我把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

您的头和正文过程定义与不匹配

在标题中,您有:

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)混合匹配。选择其中一个
正文中定义的过程中的

"参数名称与正文中相应的参数名称不匹配。"

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

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

我的规格:

我的身体

与定义为sub_marketcode的规范相比,我的market_code参数在正文中有所不同。由于这种差异,出现了错误。我将规范中的submarketcode参数更改为marketcode,使其与主体匹配,从而解决了上述问题。

很明显,规范中没有定义程序"r_date"one_answers"dur"的主体实现中提到的两个参数。错误是由于主体和规范之间的差异造成的。

最新更新