主キー値が指定されたときにデータ行を返す関数を含むパッケージ (DATA_PKG) があります。別のパッケージ (CALLER_PKG) のプロシージャーによって呼び出されたときに、DATA_PKG 関数の 1 つが失敗する状況を発見しました。次のエラーがスローされます。
ora -00932: inconsistent datatypes: expected - got -
パッケージ本体でまったく同じ関数を使用して CALLER をコンパイルすると、機能します。これが私のコードです:
CREATE OR REPLACE PACKAGE "DATA_PKG" AS
FUNCTION data_function
(primary_i IN table_name.id%type)
RETURN table_name%ROWTYPE;
END DATA_PKG;
/
CREATE OR REPLACE PACKAGE BODY "DATA_PKG" AS
FUNCTION data_function
(primary_i IN table_name.id%type)
RETURN table_name%ROWTYPE AS
retval table_name%ROWTYPE;
BEGIN
SELECT * INTO retval FROM table_name WHERE id = primary_i;
RETURN retval;
END data_function;
END DATA_PKG;
/
CREATE OR REPLACE PACKAGE "CALLER" AS
PROCEDURE calling_proc
(key_i IN table_name.id%TYPE);
END CALLER;
/
CREATE OR REPLACE PACKAGE BODY "CALLER" AS
PROCEDURE calling_proc
(key_i IN table_name.id%TYPE) AS
table_rec table_name%rowtype;
BEGIN
table_rec := data_pkg.data_function(primary_i=>key_i);
/*
do something with the returned record
*/
END calling_proc;
END CALLER;
caller.calling_proc が実行されると、このコードは前述の方法で ora -00932 で失敗します。
次のコードが機能します。
CREATE OR REPLACE PACKAGE BODY "CALLER" AS
FUNCTION data_function
(primary_i IN table_name.id%type)
RETURN table_name%ROWTYPE AS
retval table_name%ROWTYPE;
BEGIN
SELECT * INTO retval FROM table_name WHERE id = primary_i;
RETURN retval;
END data_function;
PROCEDURE calling_proc
(key_i IN table_name.id%TYPE) AS
table_rec table_name%rowtype;
BEGIN
table_rec := data_function(primary_i=>key_i);
/*
do something with the returned record
*/
END calling_proc;
END CALLER;
これが機能する理由、私が考えるコードへの些細な変更を誰かに教えてもらえますか? このエラーは、データ型に一貫性がないことを示していますが、「ソリューション」では何も変更していません。
これは以前に誰かに起こったことがありますか?また、エラー メッセージのダッシュが何を表しているか説明できる人はいますか? ここで名前が付けられたデータ型が表示されることを期待しています。