Oracle 函式function之返回結果集

2021-08-06 05:57:27 字數 4002 閱讀 2737

可以按照最後的寫。

工作中常需要經過一段複雜邏輯處理後,得出的乙個結果集。並能夠將這個結果集作為乙個表看待,去進行關聯查詢

我一般採用建立函式function的方式來處理。

--建立包,宣告function和type

create

orreplace

package pak_tem

astype date_record

isrecord --自定義型別-行(含字段及型別)

(name

varchar2 (20),

value

varchar2 (20)

);type date_table

istable

ofdate_record; --自定義table類

function

get_term_years

return

date_table --返回table型別

pipelined; --流水式

endpak_tem;

/--實現包體中的function

create

orreplace

package body pak_tem

asfunction

get_term_years

return

date_table

pipelined

isl_result date_record;

begin

for rec in (select

distinct to_char (status_time, '

yyyy')

from

tem_tb

where to_char (status_time, '

yyyy

') !=

'0001')

loop

l_result.name :

= rec.year||'

年'; l_result.value :

= rec.year

;

pipe

row (l_result); --依次返回行

endloop;

end;end

pak_tem;

/

像查詢乙個表一樣來操作function,使用 table(自定義函式)

select

*from

table(pak_tem.get_term_years());

ps:以下是定義oracle的table型別示例:

--

oracle內建型別

type string_table is

table

ofvarchar(2000);

--自定義型別(date_record)

type date_record is record --

自定義型別-行(含字段及型別)

(name

varchar2 (20),

value

varchar2 (20)

);type date_table

istable

of date_record; --

自定義table類(date_table)

自己寫的例子:

按照以上例子寫的,package:

create or replace package datastest

as type date_record is record

( empno number,

ename varchar2 (64)

); type data_table is table of date_record;

-- author : ccdsew

-- created : 2017/8/15 9:56:28

-- purpose :

-- public function and procedure declarations

function getdates(p_empno number) return data_table pipelined;

end datastest;

package body:

create or replace package body datastest

as/* type date_record is record

( empno number,

ename varchar2 (64)

);*/

/* type data_table is table of date_record;*/

-- function and procedure implementations

function getdates(p_empno number) return data_table pipelined is

l_result date_record;

begin

for data in (select e.empno,e.ename from emp e where e.empno = p_empno) loop

l_result.empno := data.empno;

l_result.ename := data.ename;

pipe row(l_result);

end loop;

end getdates;

end datastest;

測試:

select datastest.getdates(7369) from dual;
也可以這樣寫(比較適合oracle):

package:

create or replace package datatest001 is

-- author : ccdsew

-- created : 2017/8/15 13:26:38

-- purpose : test

-- public type declarations

type date_record is record

( empno number,

ename varchar2 (64)

); type data_table is table of date_record;

-- public function and procedure declarations

function getdates(p_empno number) return data_table pipelined;

end datatest001;

package body:

create or replace package body datatest001 is

function getdates(p_empno number) return data_table pipelined is

l_result date_record;

begin

for data in (select e.empno,e.ename from emp e where e.empno = p_empno) loop

l_result.empno := data.empno;

l_result.ename := data.ename;

pipe row(l_result);

end loop;

end getdates;

end datatest001;

測試和之前一樣。

ECMAScript中函式function型別

說起來ecmascript中上面最有意思,我想那莫過於函式了,有意思的根源,則在於函式實際上是物件。每個函式都是function型別的例項,而且都與其他引用型別一樣具有屬性和方法。由於函式是物件,因此函式名實際上也是乙個指向函式物件的指標,不會與某個函式繫結。函式通常是使用函式宣告語法定義的,如下例...

JCo3 呼叫簡單SAP函式(Function)

本文闡述如何使用jco呼叫簡單sap函式。1.建立一sap使用者 test01 關於如何建立使用者,請參考我上一部落格 jco3 建立連線到sap 1 直接連線 2.編寫 3.編譯 4.執行 執行結果 本例呼叫sap function stfc connection 然後使用得到importpara...

js作用域小記var變數和function區別

首先來乙個例子做實驗 function created return dir function myctrl var yourctrl function var d created d.ctrl d.ctrl2 可以猜一下輸出結果 輸出 d.ctrl 輸出 my ctrld.ctrl2 輸出 unc...