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 ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值