有人可以帮我把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
答案 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参数更新标题定义吗?
总结
film.title%type
)与基本类型(VARCHAR2
)混合搭配。选择其中一种。答案 1 :(得分:0)
“子程序或游标'M115_EDIT'在包规范中声明,必须在包体中定义”
我在处理项目时遇到此错误。原因是正文中定义的过程中的参数名称与正文中的相应参数名称不匹配。
我的market_code参数在与规范中被定义为sub_market_code.error的规范相比时在主体中是不同的,因为这种差异。 我将规范中的sub_market_code参数更改为market_code,以便它与正文匹配,这解决了上述问题。
显然,在程序'r_date'和'dur'的正文实现中提到的2个参数未在规范中定义。错误是由于正文和规范之间的这种差异。
答案 2 :(得分:0)
“ 参数名称”与主体中相应的参数名称不匹配。”