oracle loop函数,oracle自定义函数 for in loop示例

本文介绍了如何在Oracle中创建自定义函数,利用for in loop进行多层循环处理,以组合复杂的数据查询。首先,定义了一个名为TYPE_NQ_FORM_STATISTICS的对象类型,接着创建了存储查询结果的TYPE_NQ_FORM_TABLE类型。然后,通过一个无参数的MINI_FUN_NQ_FORM_STATISTICS函数,结合多层for in loop遍历不同表并获取所需信息。最后,展示了如何调用这个函数来获取结果集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

494dcc36251a3658dc61962a88ba13ea.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值