国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:59:09
字體:
來源:轉載
供稿:網友

因為要返回表對象,無論后續用什么方法返回,都先要聲明全局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));

函數返回oracle對象表,oracle對象表

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 航空| 吉木萨尔县| 天峨县| 永吉县| 昂仁县| 托克逊县| 旌德县| 诸城市| 昭苏县| 临城县| 随州市| 阿勒泰市| 高安市| 民乐县| 涿鹿县| 深水埗区| 扶绥县| 平乡县| 奉节县| 和政县| 阿坝| 宿松县| 英山县| 贵南县| 准格尔旗| 旬邑县| 论坛| 无锡市| 泰兴市| 宁城县| 岳西县| 平山县| 子洲县| 景德镇市| 扶绥县| 微博| 雷山县| 通化市| 河曲县| 高雄市| 遵义县|