<tablename>%ROWTYPE
と宣言された引数を持つパッケージ内にパイプラインテーブル関数(t
)を宣言しようとしています。その関数が宣言され、パッケージはエラーなしでコンパイルされます。%ROWTYPEで宣言されたパラメータを持つパイプライン関数
しかし、この機能を以下のような手順(p1
)で使用したいと思います。
CREATE OR REPLACE PACKAGE BODY t1
AS
-- private
PROCEDURE p1
IS
l_person persons%ROWTYPE;
BEGIN
FOR l_row IN (SELECT *
FROM TABLE (t (l_person)))
LOOP
NULL;
END LOOP;
END;
-- public
FUNCTION t (p_persons_record persons%ROWTYPE)
RETURN t_a_list
PIPELINED
IS
l_a t_a;
BEGIN
l_a.dummy := 'A';
PIPE ROW (l_a);
END;
END;
このサンプルコードは意味を持ちませんが、私の問題を示しています。それだけでコンパイルしますが、次のエラーを与えていない :
[Error] PLS-00382 (10: 38): PLS-00382: expression is of wrong type
[Error] PLS-00306 (10: 35): PLS-00306: wrong number or types of arguments in call to 'T'
[Error] ORA-00904 (10: 35): PL/SQL: ORA-00904: "T1"."T": invalid identifier
誰が悪いのか説明することができ、これらのエラーを修正する方法?
編集:
パッケージ仕様は次のとおりです。私はあなたのPACKAGE
仕様がt
の宣言を欠い
CREATE OR REPLACE PACKAGE t1
AS
TYPE t_a IS RECORD (dummy VARCHAR2 (1));
TYPE t_a_list IS TABLE OF t_a;
FUNCTION t (p_persons_record persons%ROWTYPE)
RETURN t_a_list
PIPELINED;
END;
申し訳ありませんが、私はパッケージ仕様を削除しました。私はそれを明確にするために質問に追加します。 –