[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 超集測試 允許不嚴格意...