ITPub博客

首页 > 数据库 > Oracle > ORACLE中实现表变量的方法

ORACLE中实现表变量的方法

原创 Oracle 作者:flzhang 时间:2017-02-24 13:36:25 0 删除 编辑

经常看到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 ;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/750077/viewspace-2134222/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SQL实践一
请登录后发表评论 登录
全部评论

注册时间:2014-03-26

  • 博文量
    97
  • 访问量
    774304