これを解決するためにここで多くの解決策を見てきましたが、それらはかなり進んでいますが、今では乗り越えられないように見えるいくつかのエラーについて雑草の中にいます。
私はOracle 11gを使用しています。レコード セット (テーブル) を返す関数が必要です。私が使用しているコードは次のとおりです。
CREATE TYPE T_TABLE IS OBJECT
(
Field1 int
, Field2 int
);
CREATE TYPE T_TABLE_COLL IS TABLE OF T_TABLE;
CREATE OR REPLACE FUNCTION FN_MyFunction
RETURN T_TABLE_COLL
IS
BEGIN
FOR I IN (SELECT Field1, Field2 FROM Table1) LOOP
IF I.Field1 = 1 THEN
BEGIN
INSERT INTO T_TABLE
SELECT Field1, Field2
FROM Table2
WHERE Field2 = I.Field2;
END;
ELSIF I.Field1 = 2 THEN
BEGIN
INSERT INTO T_TABLE
SELECT Field1, Field2
FROM Table2
WHERE Field2 = I.Field2;
END;
END IF;
END LOOP;
RETURN T_SMRYACCT_TABLE_COLL;
END;
これから受け取るエラーは次のとおりです。
FUNCTION FN_MyFunction 行と PL/SQL でステートメントが無視されます: ORA-04044: プロシージャ、関数、パッケージ、またはタイプはここでは各行 INSERT INTO T_TABLE_COLL 行で許可されていません
PLS-00330: RETURN行でのタイプ名またはサブタイプ名の使用が無効です
テーブルの種類で何が間違っていますか?