oracle的管道函式需要定義下面的三樣:
record/object type:定義乙個record或object型別的變數,這個變數用於表示返回結果集的一行資料,有點像c#中的datarow類。
table type:定義乙個集合型別,這個型別由record/object type填充。這個型別也可以理解為乙個record/object的陣列。
function:定義個返回型別為table type的函式。這個函式負責生成結果集。
上述三個資料庫物件一般定義在乙個包內,但是object type不能定義在包內,需要在包外部定義,包內引用。
示例:
1create
orreplace package pck_test as
23 type type_test is
record4(
5 r_val number,6
date_value date,
7 test_field varchar2(50
byte)8);
910 type table_test is
table
oftype_test;
1112
function f_test_table(p_date in
varchar2) return
table_test pipelined;
1314
end pck_test;
1呼叫函式:create
orreplace package body pck_test as23
function f_test_table(p_date in
varchar2) return table_test pipelined is45
l_row type_test;67
begin89
for i in
1..10
10loop
1112 l_row.r_val :=
i;13 l_row.date_value := to_date(p_date,'
yyyy-mm-dd hh24:mi:ss');
14 l_row.test_field :=
'test';
15--
-如果type_test定義為object型別,則可以這麼賦值
16--
-l_row := type_test(i,to_date(p_date,'yyyy-mm-dd hh24:mi:ss'),'test')
17pipe
row(l_row);
1819
20end
loop;
21return;22
23exception
24--
your exception sql statement
25when others then
return;26
endf_test_table;
2728
29end pck_test;
呼叫時需要與table關鍵字配合使用,如下圖所示。
oracle 管道流函式
管道流函式 1 先定義 物件類中 比如 create or replace type obj cjgzl is object mjvarchar2 20 民警 sspcsvarchar2 12 派出所 sqdmvarchar2 20 社群 fwslnumber 10 房屋數 czrksnumber ...
ORACLE管道化表函式
在pl sql中,如果要返回資料的多個行,必須通過返回乙個ref cursor的游標,或者乙個資料集合 如臨時表或物理表 來完成,而ref cursor的侷限於可以從查詢中選擇的資料,而資料集合的侷限性在於必須先create table 無論是建立臨時表還是物理表 來進行具體化,具體化後,會因為頻繁...
Oracle 管道化表函式
在pl sql中,如果要返回資料的多個行,必須通過返回乙個ref cursor的游標,或者乙個資料集合 如臨時表或物理表 來完成,而ref cursor的侷限於可以從查詢中選擇的資料,而資料集合的侷限性在於必須先create table 無論是建立臨時表還是物理表 來進行具體化,具體化後,會因為頻繁...