注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

Oracle中的数组  

2009-06-23 09:25:27|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    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;

    出现错误:
ORA-06502: PL/SQL: 数字或值错误 : 字符到数值的转换错误
ORA-06512: 在 line 9

    以上两个变量的赋值中,其下标的顺序正好相反,正确的写法应该是:

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

  评论这张
 
阅读(1096)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017