zoukankan      html  css  js  c++  java
  • 转载 ORACLE中实现表变量的方法

    源文地址:http://blog.itpub.net/750077/viewspace-2134222/

    经常看到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 ; 
  • 相关阅读:
    Alpha阶段项目复审
    复审与事后分析
    测试与发布(Alpha版本)
    第七天
    第六天
    团队作业第4周——项目冲刺
    第一天
    第二天
    第四天
    第五天
  • 原文地址:https://www.cnblogs.com/champaign/p/9717010.html
Copyright © 2011-2022 走看看