oracle+for+数组,Oracle中的数组

2010-04-21 14:04

oracle中构造数组的例子:

declare

type t_varray is varray(4) of number;

arr t_varray;

begin

arr := t_varray(1,2,3,4);

for i in 1..arr.count loop

dbms_output.put_line(arr(i));

end loop;

end;

构造二维数组的例子:

declare

type t_varray is varray(4) of number;

type t_varray_varray is varray(3) of t_varray;

arr t_varray;

v_arr t_varray_varray;

begin

arr := t_varray(1,2,3,4);

v_arr := t_varray_varray(arr,arr,arr);

for i in 1..v_arr.count loop

for j in 1..v_arr(i).count loop

dbms_output.put(v_arr(i)(j));

if (j = v_arr(i).count) then

dbms_output.put_line('');

end if;

end loop;

end loop;

end;

除了使用varray,还可以使用索引表构造数组。使用索引表定义数组,不需要指定数组的上限,数组的大小只与内存限制有关。而且索引组织表定义是指定的索引项并不一定要是数值。(下一个例子是sys用户中的例子)

DECLARE

TYPE T_TAB IS TABLE OF NUMBER INDEX BY VARCHAR2(30);

V_VAR T_TAB;

V_STR VARCHAR2(30);

BEGIN

FOR I IN (SELECT OWNER, COUNT(*) CN from DBA_TABLES GROUP BY OWNER) LOOP

V_VAR(I.OWNER) := I.CN;

END LOOP;

V_STR := V_VAR.FIRST;

WHILE (V_VAR.EXISTS(V_STR)) LOOP

DBMS_OUTPUT.PUT_LINE(RPAD(V_STR, 20, ' ') || ':' || V_VAR(V_STR));

V_STR := V_VAR.NEXT(V_STR);

END LOOP;

END;

如果构造二维以上的数组,且维度不全是数值,那么就需要注意了:

DECLARE

TYPE T_NUM_TAB IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

TYPE T_VAR_TAB IS TABLE OF NUMBER INDEX BY VARCHAR2(10);

TYPE T_NUM_VAR IS TABLE OF T_NUM_TAB INDEX BY VARCHAR2(10);

TYPE T_VAR_NUM IS TABLE OF T_VAR_TAB INDEX BY BINARY_INTEGER;

V_NUM_VAR T_NUM_VAR;

V_VAR_NUM T_VAR_NUM;

BEGIN

V_NUM_VAR(5)('A') := 1;

V_VAR_NUM('A')(5) := 1;

END;

&nbs

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值