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", не определены в спецификации.ошибка из-за этой разницы между телом и спецификация.