Oracle Error PLS-00323: подпрограмма или курсор объявлены в спецификации пакета и должны быть определены в теле пакета
может кто-нибудь помочь мне поместить мою процедуру pl/sql в пакет? Я пробовал, и я борюсь с этим:
Это то, что у меня есть, для моей спецификации пакета:
CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;
--
Это мое тело пакета, где im сталкивается с проблемами:
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
3 ответов
ваши определения заголовка и процедуры тела не соответствуют
в заголовке, у вас есть:
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)
вам, вероятно, просто нужно обновить определение заголовка с двумя дополнительными параметрами?
Подведем Итоги
- убедитесь, что определение заголовка соответствует всем параметрам реализации тела (количество параметров, имена параметров, порядок параметров и типы параметров)
- согласно комментарию Алекса, не смешивайте и не сопоставляйте пользовательский тип (
film.title%type
) с базовым типом (VARCHAR2
). Выбирай одно или другое.
"имя параметра это было внутри процедуры, определенной в теле, не совпадало с соответствующим именем параметра в теле."
"подпрограмма или курсор "M115_EDIT" объявлены в спецификации пакета и должны быть определены в теле пакета"
Я получил эту ошибку, когда работал над своим проектом.причиной этого было имя параметра, которое было внутри процедуры, определенной в теле, не совпадало с соответствующим именем параметра в теле.
мой параметр market_code отличается в теле по сравнению со спецификацией, где она определена как sub_market_code.произошла ошибка из-за этой разницы. я изменил параметр sub_market_code в спецификации на market_code, чтобы он соответствовал телу, и это решило проблему, упомянутую выше.
ясно, что 2 параметра, которые упоминаются в вашей реализации тела процедуры "r_date" и "dur", не определены в спецификации.ошибка из-за этой разницы между телом и спецификация.