表变量如何传参oracle,ORACLE中实现表变量的方法

经常看到SQLSERVER 中用表变量类型的方式就能做到缓存一个比较大的中间结果,

然后再对这个表变量做处理,非常方便,那么ORACLE有这种表变量的方式处理中间结果么

实验后发下你用如下方法可以起到SQL SERVER里表变量的作用

1 创建基础数据表

create table T_TEST_PIP(

ID VARCHAR(10),

TT DATE,

DATA_ VARCHAR2(60)

)

SELECT *

FROM T_TEST_PIP

2 创建记录行类型

create or replace type row_data as object (

id number,

time date,

data varchar2(60)

);

3 创建行集合类型

create or replace type rows_array as table of row_data;

4 封装查询结果到行集合类型里

create or replace function f_test_array(n in number default null) return rows_array as --RETURN out_rec_set PIPELINED IS

t_array rows_array := rows_array();

--id1 number;

--time1 date;

--data1 varchar2(60);

BEGIN

FOR i in 1..3 LOOP

t_array.extend();

--把一个相对复杂SQL查询出的结果,放入行集合类型

SELECT   ROW_DATA (T.ID

,T.TT

,CASE WHEN T.DATA_ IS NULL THEN '111'

ELSE T.DATA_

END) INTO t_array(i)

FROM   T_TEST_PIP T

WHERE  id = i

GROUP BY T.ID,T.TT,T.DATA_;

END LOOP;

dbms_output.put_line('test '||t_array(1).ID);

return t_array;

END;

5 从行集合类型里取数据

select * from table(f_test_array());

6 应用行集合类型和其他表联合

SELECT *

FROM table(f_test_array()) T1

,table(f_test_array()) T2

,T_TEST_PIP T3

WHERE T1.ID = T2.ID

AND   T1.ID = T3.ID ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值