web-dev-qa-db-ja.com

OracleエラーPLS-00323:サブプログラムまたはカーソルはパッケージ仕様で宣言されており、パッケージ本体で定義する必要があります

誰かが私の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
17
SqlNoob

ヘッダーとボディプロシージャの定義が一致しません

ヘッダーには次のものがあります。

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)

おそらく、2つの追加のOUTパラメーターでヘッダー定義を更新する必要がありますか?

要約する

  • ヘッダー定義が本体実装のすべてのパラメーター(パラメーターの数、パラメーターの名前、パラメーターの順序、およびパラメーターの種類)と一致することを確認します
  • アレックスのコメントによると、カスタムタイプ(film.title%type)ベースタイプ(VARCHAR2)。どちらかを選択してください。
34
StuartLC

「サブプログラムまたはカーソル 'M115_EDIT'はパッケージ仕様で宣言されており、パッケージ本体で定義する必要があります」

プロジェクトで作業中にこのエラーが発生しました。この理由は、本体で定義されたプロシージャ内のパラメーター名が、本体の対応するパラメーター名と一致しなかったためです。

私の仕様:

私の体

この違いによりsub_market_code.errorが発生したと定義されている仕様と比較すると、私のmarket_codeパラメーターは本体で異なります。仕様のsub_market_codeパラメーターをmarket_codeに変更して、本文と一致するようにし、上記の問題を解決しました。

プロシージャ 'r_date'および 'dur'のボディ実装で言及されている2つのパラメータは、仕様では定義されていません。エラーは、ボディと仕様のこの違いによるものです。

パラメータ名ボディで定義されたプロシージャ内にあり、ボディの対応するパラメータ名と一致しませんでした。」

0
Khang Dq