說明 表函數可接受查詢語句或游標作為輸入參數,並可輸出多行數據。 該函數可以平行執行,並可持續輸出數據流,被稱作管道式輸出。 應用表函數可將數據轉換分階段處理,並省去中間結果的存儲和緩衝表。 優勢 1.一些複雜的公用信息,但是建立視圖又實現不了,此時可以考慮使用管道輸出。 2.涉及運算較多,寫個簡單 ...
說明
表函數可接受查詢語句或游標作為輸入參數,並可輸出多行數據。
該函數可以平行執行,並可持續輸出數據流,被稱作管道式輸出。
應用表函數可將數據轉換分階段處理,並省去中間結果的存儲和緩衝表。
優勢
1.一些複雜的公用信息,但是建立視圖又實現不了,此時可以考慮使用管道輸出。
2.涉及運算較多,寫個簡單SQL實現起來較為麻煩,用table實現就ok了
實例
1.前期工作:
create or replace type ty_row as object
(
col1 varchar2(36),
col2 varchar2(36),
col3 varchar2(36)
);
create or replace type ty_table as table of ty_row;
2.接著定義一個函數,用於獲取用戶基本信息:
create or replace function f_get_user_info(v_user_id in varchar2 default null)
return ty_table as
v_user_list ty_table;
begin
select ty_row(t.user_id, nvl(t.emp_name, t.user_name), t.user_name) bulk collect
into v_user_list
from t_bs_user t
where t.user_id = v_user_id
or v_user_id is null;
return v_user_list;
end f_get_user_info;
3.使用就很簡單了:
select * from table(f_get_user_info('1'))