Oracle 方法返回集合型別 table

2021-08-27 19:03:58 字數 1806 閱讀 2322

[img]

以scott.emp 為例,根據職位(mgr)編號,查出該職位編號的所有資訊

先建立型別:

相當於每一行記錄的型別 可以理解為 scott.emp%rowtype

1.create or replace type my_record is object(

empno number(4) ,

ename varchar2(10),

job varchar2(9),

mgr number(4),

hiredate date,

sal number(7,2),

comm number(7,2),

deptno number(2)

)2. create or replace type mtab is table of my_record;

可以理解為 mtab集合裡每一行的記錄型別為my_record.,相當於my_record型別記錄的集合,也就是表(table)

3.方法一: 使用 bulk collect into 一次性插入到集合變數裡

create or replace function fn_test1(num varchar2)

return mtab

ismytab mtab;

begin

select my_record(empno,ename,job,mgr,hiredate,sal,comm,deptno) bulk collect into mytab from scott.emp where mgr=num;

return mytab;

end;

注意:my_record(empno,ename,job,mgr,hiredate,sal,comm,deptno) 如果寫成empno,ename,job,mgr,hiredate,sal,comm,deptno 會報 「沒有足夠的值」 錯誤。強制型別一致就沒問題了。

方法二: 以集合下標的方式

create or replace function fn_test2(num varchar2)

return mtab

ismytab mtab:=mtab();--object 物件型別

begin

for i in (select empno,ename,job,mgr,hiredate,sal,comm,deptno from scott.emp where mgr=num)

loop

mytab.extend();

mytab(mytab.count):=my_record(i.empno,i.ename,i.job,i.mgr,i.hiredate,i.sal,i.comm,i.deptno);

end loop;

return mytab;

end;

方法三:以管道方式

create or replace function fn_test3(num varchar2)

return mtab pipelined --使用管道方式

isbegin

for i in (select empno,ename,job,mgr,hiredate,sal,comm,deptno from scott.emp where mgr=num)

loop

pipe row(my_record(i.empno,i.ename,i.job,i.mgr,i.hiredate,i.sal,i.comm,i.deptno)); --- pipe row 一行一行插入

end loop;

return; --這裡不需要返回值,只需要寫return就ok。

end;

oracle 函式返回乙個集合

create or replace function text starttime in varchar2,endtime in varchar2,timetype in number,spid in number,pagesize in number,currentpage in number,d...

Oracle 方法返回自定義表型別的例子

create or replace type t test as object id integer,rq date,mc varchar2 60 create or replace type t test table as table of t test create or replace fun...

集合型別內建方法總結

集合型別內建方法總結 集合 s 方法名 等價符號 方法說明 s.issubset t s t 子集測試 允許不嚴格意義上的子集 s 中所有的元素都是 t 的成員 s t 子集測試 嚴格意義上 s t 而且 s 中所有的元素都是 t 的成員 s.issuperset t s t 超集測試 允許不嚴格意...