【发布时间】:2012-09-02 13:05:30
【问题描述】:
我在这里查看了许多解决方案来尝试解决这个问题,他们已经走了很远,但现在我陷入了一些我似乎无法克服的错误中。
我使用的是 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 行上无效使用类型名称或子类型名称
我对表格类型做错了什么?
【问题讨论】:
-
如果您正在执行插入/更新或删除操作,请使用存储过程而不是函数。
-
我需要将结果连接到其他表,我不相信我可以在连接子句中使用 SP。
标签: oracle function plsql oracle11g