誰かが私の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
ヘッダーとボディプロシージャの定義が一致しません
ヘッダーには次のものがあります。
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
)。どちらかを選択してください。「サブプログラムまたはカーソル 'M115_EDIT'はパッケージ仕様で宣言されており、パッケージ本体で定義する必要があります」
プロジェクトで作業中にこのエラーが発生しました。この理由は、本体で定義されたプロシージャ内のパラメーター名が、本体の対応するパラメーター名と一致しなかったためです。
この違いによりsub_market_code.errorが発生したと定義されている仕様と比較すると、私のmarket_codeパラメーターは本体で異なります。仕様のsub_market_codeパラメーターをmarket_codeに変更して、本文と一致するようにし、上記の問題を解決しました。
プロシージャ 'r_date'および 'dur'のボディ実装で言及されている2つのパラメータは、仕様では定義されていません。エラーは、ボディと仕様のこの違いによるものです。
「パラメータ名ボディで定義されたプロシージャ内にあり、ボディの対応するパラメータ名と一致しませんでした。」