Oracle管道函式示例

2022-02-09 22:31:08 字數 1684 閱讀 7525

oracle的管道函式需要定義下面的三樣:

record/object type:定義乙個record或object型別的變數,這個變數用於表示返回結果集的一行資料,有點像c#中的datarow類。

table type:定義乙個集合型別,這個型別由record/object type填充。這個型別也可以理解為乙個record/object的陣列。

function:定義個返回型別為table type的函式。這個函式負責生成結果集。

上述三個資料庫物件一般定義在乙個包內,但是object type不能定義在包內,需要在包外部定義,包內引用。

示例:

1

create

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 無論是建立臨時表還是物理表 來進行具體化,具體化後,會因為頻繁...