有人能帮我把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"的主体实现中提到的两个参数。错误是由于主体和规范之间的差异造成的。