Sql Oracle错误PLS-00323:子程序或游标在包规范中声明,必须在包体中定义
有人能帮我把pl/sql过程放在一个包中吗?我已经试过了,我正在努力: 这就是我的包装规格: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
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
很明显,规范中没有定义程序“r_date”和“dur”的正文实施中提到的两个参数。错误是由于正文和规范之间的差异造成的。“正文中定义的过程中的参数名与正文中相应的参数名不匹配。”当我尝试在pkg正文中得到错误:错误(4,11):PLS-00323:子程序或光标“GET_FILMS”在程序包规范中声明,必须在程序包中定义body@SqlNoob-
%type
很好,但是你必须使用完全相同的声明,即使你知道它们是相同的,也不能混合和匹配;你是在电影中制作了specfname.title%type
还是离开了在asvarchar
?整个声明必须相同。(并且不能指定参数的大小,因此varchar2(50字节)
将导致错误).另外,请记住重新编译包头,我正在努力解决这个问题,因为我更改了一个过程定义以添加错误代码,而我忘记了重新编译包头。