ORACLE實現類似SQL SERVER表變量的方法

sqlserver 中用表變量類型的方式能做到緩存一個比較大的中間結果,
然後非常方便的操作這個表變量,oracle中雖然沒有表變量這一類型,但是可以通過以下方法來實現相同的效果

    1 創建基礎數據表
    create table t_test_pip(
       id varchar(10),
       time 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  t_array rows_array := rows_array();
    for i in 1..3 loop
    t_array.extend();
    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; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章