利用函數返回oracle對象表的三種方法_oracle

來源:互聯網
上載者:User

因為要返回表對象,無論後續用什麼方法返回,都先要聲明全域type;並且,欄位變數類型要為object,不能為record:

create or replace type t_test as object( EMPNO  NUMBER(4), ENAME  VARCHAR2(10), JOB   VARCHAR2(9), SAL   NUMBER(7,2));create or replace type t_test_table as table of t_test;

至於返回表對象的方法,目前發現三種:
 1、用數組

create or replace function f_test_array(v_deptno in number default null)return t_test_tableis v_test t_test_table := t_test_table();cursor cur is select empno, ename, job, sal from emp where deptno = v_deptno;beginfor c in cur loopv_test.extend();v_test(v_test.count) := t_test(c.empno, c.ename, c.job, c.sal);end loop;return v_test;end;

2、用pipe

create or replace function f_test_pipe(v_deptno in number default null)return t_test_table PIPELINED isv_test t_test_table := t_test_table();cursor cur is select empno, ename, job, sal from emp where deptno = v_deptno;begin for c in cur looppipe row(t_test(c.empno, c.ename, c.job, c.sal)); end loop; return; end;

這兩種都需要用遊標遍曆,得到表對象,效能上估計第2種較高。 

3、用collect(不需要遊標,代碼相對簡單)

create or replace function f_test_collect(v_deptno in number default null)return t_test_tableis v_test t_test_table := t_test_table();beginselect t_test(empno, ename, job, sal) bulk collect into v_test from emp where deptno = v_deptno;return v_test;end;

需要注意的是,select into之前要先把輸出結果對象化:
t_test(empno, ename, job, sal)
否則會報錯: 
ORA-00947: 沒有足夠的值(object多欄位)
ORA-00932: 資料類型不一致(object單一欄位)
而如果直接在plsql塊中declare類型的話,是不需要先對象化輸出結果的。
三種函數定義方式可以測試輸出一樣的結果:

select * from table(f_test_pipe(30));select * from table(f_test_array(30));select * from table(f_test_collect(30));

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.