--创建一个自定义OBJECT对象
CREATE OR REPLACE TYPE OBJ_TABLE AS OBJECT
(
NSRZT_DM VARCHAR2(10),
NSRZTMC VARCHAR2(100)
);
--创建一个自定义table对象引用OBJECT对象,创建后如要删除被应用对象需先删除应用对象,类似主外键
CREATE OR REPLACE TYPE LIST_TABLE IS TABLE OF OBJ_TABLE
--创建函数
CREATE OR REPLACE FUNCTION F_PIPES(JLS NUMBER) RETURN LIST_TABLE
PIPELINED --LIST_TABLE返回类型
AS
V_OBJ_TABLE OBJ_TABLE;
BEGIN
FOR I IN (SELECT NSRZT_DM, NSRZTMC FROM TEST01 WHERE ROWNUM <= JLS) LOOP
V_OBJ_TABLE := OBJ_TABLE(I.NSRZT_DM, I.NSRZTMC);
PIPE ROW(V_OBJ_TABLE); --返回OBJ_TABLE类型的单列数据
END LOOP;
RETURN;
END F_PIPES;
-----测试表TEST01数据如下图所示
--测试函数
----结果数据以集合(collection)形式返回
SELECT F_PIPES(5) FROM DUAL
----结果数据以单行形式返回
SELECT * FROM TABLE(F_PIPES(6));