1、新建type,就是返回结果集有什么,这里就写什么(相当于表的字段)
CREATE OR REPLACE TYPE "TYPE_NQ_FORM_STATISTICS" as object
(
recordid varchar2(500),
form_name varchar2(200),
sortone varchar2(100),
sorttwo varchar2(100),
formids varchar2(500),
formidm varchar2(500),
reason varchar2(500),
check_date varchar2(100),
check_userid varchar2(100),
check_ward varchar2(100),
ward_name varchar2(100),
dept varchar2(100)
)
2、新建table,(相当于把上部分的查询的字段保存到这张表中)
CREATE OR REPLACE TYPE "TYPE_NQ_FORM_TABLE" is table of TYPE_NQ_FORM_STATISTICS
3、创建自定义函数
CREATE OR REPLACE FUNCTION "MINI_FUN_NQ_FORM_STATISTICS"--我写得是无参函数,所以这里没有传参
return TYPE_NQ_FORM_TABLE --返回结果集table
pipelined is
recordid varchar2(200); --定义变量
formids varchar2(200);
formidm varchar2(200);
rwodata TYPE_NQ_FORM_STATISTICS; --查询的结果集
begin
for item in (select t.record_id, m.form_id --循环1(item )
from T_NQ_FORM_RECORD_COLUMN t
inner join T_NQ_FORM_COLUMN m
on t.column_id = m.column_id
and t.column_value = '1') loop --for in lop循环,查询一条循环一次
recordid := item.record_id; --给变量赋值
formids := item.form_id;
for itemo in (select o.column_content --循环2(itemo )
from T_NQ_FORM_COLUMN o
where o.form_id = formids --这里是根据循环1的每一个formids来循环
and o.td_index = 1) loop
for itemt in (select p.*, --循环3(itemt )
(select t.ward_name
from T_HRM_WARD t
where t.ward_id = p.checked_ward_id) as ward_name
from T_NQ_FORM_RECORD p
where p.record_id = recordid--这里是根据循环1的每一个recordid来循环
and p.state = 2) loop
formidm := itemt.form_id;
for itemf in (select t.form_name, t.sortone, t.sorttwo --循环4(itemf )
from T_NQ_FORM t
where t.form_id = formidm--这里是根据循环3的每一个formidm来循环
and t.del_flag = 0) loop
rwodata := TYPE_NQ_FORM_STATISTICS(itemt.record_id,
itemf.form_name,
itemf.sortone,
itemf.sorttwo,
item.form_id,
itemt.form_id,
itemo.column_content,
itemt.check_date,
itemt.check_user_id,
itemt.checked_ward_id,
itemt.ward_name,
itemt.dept_id);--查询想返回的所有结果
pipe row(rwodata);--添加结果集
end loop; --结束循环,我这里用了4个循环
end loop;
end loop;
end loop;
end MINI_FUN_NQ_FORM_STATISTICS;
4、调用函数
select * from table(MINI_FUN_NQ_FORM_STATISTICS)