如何解决在表函数中插入表集合类型,而无需在PL / SQL中使用显式游标
declare
type deliveryStat_o IS record (
warehouseName varchar2(20),shipMode char(30),thirty_days number,sixty_days number,ninety_days number,oneTwenty_days number,veryLate number
);
type deliveryStat_t is TABLE OF deliveryStat_o;
statTable deliveryStat_t;
begin
SELECT w_warehouse_name,sm_type,1 AS thirty_days,1 AS sixty_days,1 AS ninety_days,1 AS oneTwenty_days,1 AS veryLateDelivery
bulk collect into statTable
FROM catalog_sales,warehouse,ship_mode,date_dim
WHERE cs_ship_date_sk = d_date_sk
AND cs_warehouse_sk = w_warehouse_sk
AND cs_ship_mode_sk = sm_ship_mode_sk
GROUP BY w_warehouse_name,sm_type ;
end;
如何在返回嵌套集合statTable的表函数中执行此操作。我知道可以使用显式游标来实现;但是,是否可以在不使用光标的情况下做到这一点?
解决方法
对于上下文,我将从此作为基础
formatted_name: 'east_java'
要将其转换为允许使用表函数,则这些类型必须为SQL类型,因此
SQL> set serverout on
SQL> declare
2 type deliveryStat_o IS record (
3 empno number,ename varchar2(20)
4 );
5 type deliveryStat_t is TABLE OF deliveryStat_o;
6
7 statTable deliveryStat_t;
8
9 begin
10
11 SELECT empno,ename
12 bulk collect into statTable
13 FROM emp;
14 dbms_output.put_line('recs='||statTable.count);
15 end;
16 /
recs=14
PL/SQL procedure successfully completed.
现在完成了,查询必须返回一个对象表,所以
SQL> create or replace
2 type deliveryStat_o as object (
3 empno number,ename varchar2(20)
4 );
5 /
Type created.
SQL> create or replace
2 type deliveryStat_t as table of deliveryStat_o
3 /
Type created.
现在可以轻松将其转换为表函数
SQL> set serverout on
SQL> declare
2 statTable deliveryStat_t;
3 begin
4
5 SELECT deliveryStat_o(empno,ename)
6 bulk collect into statTable
7 FROM emp;
8 dbms_output.put_line('recs='||statTable.count);
9 end;
10 /
recs=14
PL/SQL procedure successfully completed.
如果要返回很多行,请考虑使用流水线函数,以避免将所有行收集到嵌套表中的内存开销
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。