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

Sql Oracle错误PLS-00323:子程序或游标在包规范中声明,必须在包体中定义,sql,oracle,stored-procedures,plsql,packages,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 (fn

有人能帮我把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’在包规范中声明,必须在包体中定义”

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

与定义为子市场代码的规范相比,我的市场代码参数在主体中有所不同。由于此差异,出现了错误。 我将规范中的sub_market_code参数更改为market_code,使其与主体匹配,从而解决了上述问题


很明显,规范中没有定义程序“r_date”和“dur”的正文实施中提到的两个参数。错误是由于正文和规范之间的差异造成的。

正文中定义的过程中的参数名与正文中相应的参数名不匹配。”

当我尝试在pkg正文中得到错误:错误(4,11):PLS-00323:子程序或光标“GET_FILMS”在程序包规范中声明,必须在程序包中定义body@SqlNoob-
%type
很好,但是你必须使用完全相同的声明,即使你知道它们是相同的,也不能混合和匹配;你是在电影中制作了spec
fname.title%type
还是离开了在as
varchar
?整个声明必须相同。(并且不能指定参数的大小,因此
varchar2(50字节)
将导致错误).另外,请记住重新编译包头,我正在努力解决这个问题,因为我更改了一个过程定义以添加错误代码,而我忘记了重新编译包头。