oracle is ref cursor java_ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解

ORACLE中RECORD、VARRAY、TAB、IS REF CURSOR LE的使用及实例详解

create or replace

procedure PRO_RECORD_ROW_TAB_EXAMPLE

IS

--记录一行二列的数据

type V_REC is RECORD(

FACT_NO char(4),

FACT_ODR_NO char(20)

);

--对变量进行实例化

V_REC1 V_REC;

--定义一个表示表中一行记录的变量

v_row1 odrm%rowtype;

----指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型。

--INDEX BY BINARY_INTEGER:指索引组织类型

TYPE V_TAB IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;

---实例化变量

V_TAB1 V_TAB;

--存储单列多行

TYPE T_TAB_FACT_ODR_NO IS TABLE OF ODRM.FACT_ODR_NO%TYPE INDEX BY BINARY_INTEGER;

--实例化变量

VAR_FACT_ODR_NO T_TAB_FACT_ODR_NO;

-- 存储多列多行和ROWTYPE结合使用

TYPE T_TAB_ODRM IS TABLE OF ODRM%ROWTYPE INDEX BY BINARY_INTEGER ;

--实例化变量

var_odrm t_tab_odrm;

-- 存储多列多行和RECORD结合使用

TYPE T_TAB_rec IS TABLE OF v_rec INDEX BY BINARY_INTEGER ;

--实例化变量

var_odrm_rec T_TAB_rec;

--数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY(variable array,即可变数组

TYPE V_VARRAY IS VARRAY(5) OF VARCHAR2(25);

--实例化变量

varray_1 v_varray;

/*

像游标cursor一样,游标变量ref cursor指向指定查询结果集当前行。游标变量显得更加灵活因为其声明并不绑定指定查询。

其主要运用于PLSQL函数或存储过程以及其他编程语言java等程序之间作为参数传递。

不像游标的一点,游标变量没有参数。

游标变量具有以下属性:

(%FOUND, %NOTFOUND, %ISOPEN, and %ROWCOUNT)

游标变量又分为强类型strong(with a return type)和弱类型(with no return type)

*/

---强类型

TYPE MYCURA IS REF CURSOR RETURN ODRM%ROWTYPE;

--实例化变量

ref_cur mycura;

v_row_type odrm%rowtype;

--强类型

TYPE REF_CURSOR IS REF CURSOR RETURN V_REC;

--实例化变量

ref_cur1 ref_cursor;

---弱类型

TYPE REF_CURSOR1 IS REF CURSOR ;

--实例化变量

ref_cur2 ref_cursor1;

v_fact_odr_no odrm.fact_odr_no%type;

---游标变量 与记录配合使用

TYPE REF_CURSOR2 IS REF CURSOR ;

--实例化变量

ref_cur3 ref_cursor2;

begin

select FACT_NO,FACT_ODR_NO into V_REC1

from ODRM

where rownum =1;

select * into v_row1

from ODRM

where rownum =1;

V_TAB1(-1) :='-1';

v_tab1(1) :=' 1';

---BULK COLLECT :指是一个成批聚合类型,简单的来说 , 它可以存储一个多行多列存储类型,采用BULK COLLECT可以将查询结果一次性地加载到集合中。

--采用bulkcollect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。

select FACT_ODR_NO

bulk collect into var_fact_odr_no

from ODRM

where rownum <=10;

for X in VAR_FACT_ODR_NO.first..VAR_FACT_ODR_NO.last LOOP

DBMS_OUTPUT.PUT_LINE(var_fact_odr_no(x));

end loop;

select *

bulk collect into var_odrm

from ODRM

where rownum <=11;

for X in 1..VAR_ODRM.COUNT LOOP

DBMS_OUTPUT.PUT_LINE(VAR_odrm(x).fact_no||','||var_odrm(x).fact_odr_no);

END LOOP;

select fact_no,FACT_ODR_NO

bulk collect into var_odrm_rec

from ODRM

where rownum <=10;

for X in var_odrm_rec.first..var_odrm_rec.last LOOP

DBMS_OUTPUT.PUT_LINE(VAR_FACT_ODR_NO(X));

end loop;

varray_1 := v_varray('1','2','3','4','5');

dbms_output.put_line(varray_1(1) );

VARRAY_1(5) := '500';

dbms_output.put_line(varray_1(5));

open ref_cur for select * from odrm where rownum <12;

loop

fetch ref_cur into v_row_type;

exit when ref_cur%notfound;

dbms_output.put_line(v_row_type.fact_no ||','||v_row_type.fact_odr_no);

end loop;

close ref_cur;

--

open ref_cur1 for select fact_no,fact_odr_no from odrm where rownum <12;

loop

fetch ref_cur1 into v_rec1;

exit when ref_cur1%notfound;

dbms_output.put_line(v_rec1.fact_odr_no || v_rec1.fact_no);

end loop;

close ref_cur1;

open ref_cur2 for select fact_odr_no from odrm where rownum <12;

loop

fetch ref_cur2 into v_fact_odr_no;

exit when ref_cur2%notfound;

dbms_output.put_line(v_fact_odr_no);

end loop;

close ref_cur2;

open ref_cur3 for select * from odrm where rownum <12;

loop

fetch ref_cur3 into v_row_type;

exit when ref_cur3%notfound;

dbms_output.put_line(v_row_type.fact_odr_no);

end loop;

close ref_cur3;

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值