Oracle Error PLS-00323: subprogram or cursor is declared in a package specification and must be defined in the package body

强颜欢笑 提交于 2019-12-03 16:34:49

问题


Can someone help me put my pl/sql procedure in a package? I've tried and I'm struggling with it:

This is what I have, for my package specification:

CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;

--

This is my package body where im running into the problems:

  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;

if anyone could help me fix the errors i'd appreciate it:

Error(4,11): PLS-00323: subprogram or cursor 'GET_FILMS' is declared in a package specification and must be defined in the package body

回答1:


Your header and body procedure definitions don't match

In the header, you have:

PROCEDURE get_films(fname VARCHAR2);

Whereas in the body:

PROCEDURE get_films(fname IN film.title%type, 
   r_date OUT film.release_date%type, dur OUT film.duration%type)

You probably just need to update the header definition with the two additional OUT params?

To Summarize

  • Ensure the header definition matches all parameters of the body implementation (number of parameters, names of parameters, order of parameters, and the parameter types)
  • As per Alex's comment, do not mix and match the custom type (film.title%type) with the base type (VARCHAR2). Choose one or the other.



回答2:


"subprogram or cursor 'M115_EDIT' is declared in a package specification and must be defined in the package body"

I got this error while i was working on my project.the reason for this was the a parameter name that was inside the procedure defined in the body did not match with the corresponding parameter name in the body.

my specification:

my body

my market_code parameter is different in the body when compared with the specification where it is defined as sub_market_code.error occurred due to this difference. i changed the sub_market_code parameter in the specification to market_code so that it matches with the body and this solved the problem mentioned above.

clearly 2 parameters that are mentioned in your body implementation of the procedure 'r_date' and 'dur' are not defined in the specification.error is due to this difference between the body and the specification.




回答3:


"parameter name that was inside the procedure defined in the body did not match with the corresponding parameter name in the body."



来源:https://stackoverflow.com/questions/26525204/oracle-error-pls-00323-subprogram-or-cursor-is-declared-in-a-package-specificat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!