Oracle 表类型-表值函数-过程 -例子

本文介绍了一个PLSQL函数示例,展示了如何使用管道表返回记录集,并提供了一个过程示例,说明了如何利用过程中表类型来处理复杂的查询结果,有效管理内存中的数据。

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

-------------函数----------------

create or replace

function fun1(i_v Int) 
return GETCYCLEVALUE_OBJ_TB pipelined as  
v1 GETCYCLEVALUE_OBJ;  
begin  
for myrow in (select in_dept_id from RF_DICT_DEPT) loop  
v1 := GETCYCLEVALUE_OBJ(myrow.in_dept_id);  
pipe row (v1);  
end loop;  
return;  
end;  

 

--------------过程中表类型应用实例--------------------------

create or replace
PROCEDURE  "PR_SURVEY_COMPUTE" 
(
  V_IN_SURVEY_ID IN NUMBER  --
) AS 

num number;--判断临时表是否存在
--定义表变量
v_temptab PR_SURVEY_COMPUTE_OBJ_TB := PR_SURVEY_COMPUTE_OBJ_TB(); --返回内存表
BEGIN 
               FOR rec IN ( select c.IN_SURVEY_SUBJECT_GROUP_ID,a.IN_SURVEY_OBJECT_ID,a.IN_SURVEY_ITEM_ID,avg(a.DE_SCORE) as DE_SCORE,a.DE_SCALE as DE_SCALE
                          from RF_SURVEY_RESULT_DETAIL a left join RF_SURVEY_RELATION b on a.IN_SURVEY_SUBJECT_ID=b.IN_SURVEY_SUBJECT_ID 
                          left join RF_SURVEY_RELATE_TEMPLATE c on b.IN_SURVEY_RELATE_TEMPLATE_ID=c.IN_SURVEY_RELATE_TEMPLATE_ID 
                          where a.IN_SURVEY_ID=b.IN_SURVEY_ID and a.IN_SURVEY_ID=V_IN_SURVEY_ID and a.ST_STATE='2'
                                and a.DE_SCORE > 0 and (c.IN_TRIMMEAN_PARAM=0 or c.IN_TRIMMEAN_PARAM is null)
                          group by a.IN_SURVEY_OBJECT_ID,a.IN_SURVEY_ITEM_ID,c.IN_SURVEY_SUBJECT_GROUP_ID,a.DE_SCALE )  LOOP
                          
                  v_temptab.Extend; 
                  v_temptab(v_temptab.count) := PR_SURVEY_COMPUTE_OBJ(NULL,NULL,NULL,NULL,NULL,NULL); 
                  v_temptab(v_temptab.count).temp_id :=v_temptab.count;
                  v_temptab(v_temptab.count).in_subject_group_id := rec.IN_SURVEY_SUBJECT_GROUP_ID;
                  v_temptab(v_temptab.count).in_object_id := rec.IN_SURVEY_OBJECT_ID;  
                   v_temptab(v_temptab.count).in_survey_item_id := rec.IN_SURVEY_ITEM_ID;
                  v_temptab(v_temptab.count).de_avage := rec.DE_SCORE;
                  v_temptab(v_temptab.count).de_scale := rec.DE_SCALE;   
                  
                END LOOP;   
            


     
 
EXCEPTION
  WHEN OTHERS THEN
  --rollback to point_Start;
  ROLLBACK;--全部回滚
  RETURN;
END PR_SURVEY_COMPUTE;


----------SQL-------


select *    from table(v_temptab) t3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值