从Oracle函数返回表
发布时间:2020-12-12 13:10:09 所属栏目:百科 来源:网络整理
导读:我已经在这里看了很多解决方案,试图解决这个问题,他们已经走得很远,但现在我正处于一些错误的杂草中,我似乎无法过去. 我在Oracle 11g上.我需要一个函数来返回一个记录集(表).这是我正在使用的代码: CREATE TYPE T_TABLE IS OBJECT( Field1 int,Field2 int);
我已经在这里看了很多解决方案,试图解决这个问题,他们已经走得很远,但现在我正处于一些错误的杂草中,我似乎无法过去.
我在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行 我对表格类型做错了什么? T_TABLE_COLL是一个集合.您不能在集合上使用insert.CREATE OR REPLACE FUNCTION FN_MyFunction RETURN T_TABLE_COLL IS l_res_coll T_TABLE_COLL; l_index number; BEGIN l_res_coll := T_TABLE_COLL(); FOR I IN (SELECT col1,col2 FROM Table1) LOOP IF I.col1 = 1 THEN l_res_coll.extend; l_index := l_res_coll.count; l_res_coll(l_index):= T_TABLE(i.col1,i.col2); END IF; END LOOP; return l_res_coll; END; 功能在行动 select * from table(FN_MyFunction()) 要获得有关集合是什么以及如何使用它们的更多信息,请阅读this (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |