CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

PL/SQL关联数组

作者: 戴羽,  出处:IT专家网, 责任编辑: 李书琴, 
2008-05-14 09:30
  在PL/SQL中,对于任何数组来说,当用在较少记录中时效率是最高的,例如简单查找表。如果你发现你加载成千上万的记录到数组中,那么你很可能是哪里做错了。

  【IT专家网独家】当你想搜索某一个特定元素的值而不是整个数组的时候,PL/SQL关联数组对于名称-值对类型的数组是非常有用的。应用11g文档的话“它就像一个SQL表的简单版本,你可以基于主键的值来提取值”。在PL/SQL中,对于任何数组来说,当用在较少记录中时效率是最高的,例如简单查找表。如果你发现你加载成千上万的记录到数组中,那么你很可能是哪里做错了。

  下面是一个典型的名称-值对的示例:

示例

  注意,我可以通过名称来简单地访问到一个元素,而不必进行循环。下一个例子显示了怎样对一个关联数组进行循环。这可能看起来与关联数组的意图相反,但是有可能有这种需求:


  declare
  type assoc_arr is table of varchar2(255) index by varchar2(255);
  apollo_commanders assoc_arr;
  begin
  apollo_commanders('Apollo 11' := 'Neil Armstrong';
  apollo_commanders('Apollo 12' := 'Pete Conrad';
  apollo_commanders('Apollo 13' := 'James Lovell';
  apollo_commanders('Apollo 14' := 'Alan Shepard';
  apollo_commanders('Apollo 15' := 'David Scott';
  apollo_commanders('Apollo 16' := 'John W. Young';
  apollo_commanders('Apollo 17' := 'Eugene A. Cernan';
  dbms_output.put_line(apollo_commanders('Apollo 11'));
  dbms_output.put_line(apollo_commanders('Apollo 14'));
  end;
  /
  – Results:
  – Neil Armstrong
  – Alan Shepard

  最后,一个更复杂的使用一个常用记录的例子:


  declare
  type assoc_arr is table of varchar2(255) index by varchar2(255);
  apollo_commanders assoc_arr;
  l_current_mission varchar2(255);
  begin
  apollo_commanders('Apollo 11' := 'Neil Armstrong';
  apollo_commanders('Apollo 12' := 'Pete Conrad';
  apollo_commanders('Apollo 13' := 'James Lovell';
  apollo_commanders('Apollo 14' := 'Alan Shepard';
  apollo_commanders('Apollo 15' := 'David Scott';
  apollo_commanders('Apollo 16' := 'John W. Young';
  apollo_commanders('Apollo 17' := 'Eugene A. Cernan';
  l_current_mission := apollo_commanders.first;
  loop
  exit when l_current_mission is null;
  dbms_output.put_line('Mission: '||l_current_mission||', Commander: '||apollo_commanders(l_current_mission));
  l_current_mission := apollo_commanders.next(l_current_mission);
  end loop;
  end;
  /
  – Results:
  – Mission: Apollo 11, Commander: Neil Armstrong
  – Mission: Apollo 12, Commander: Pete Conrad
  – Mission: Apollo 13, Commander: James Lovell
  – Mission: Apollo 14, Commander: Alan Shepard
  – Mission: Apollo 15, Commander: David Scott
  – Mission: Apollo 16, Commander: John W. Young
  – Mission: Apollo 17, Commander: Eugene A. Cernan

 

  IT专家网原创文章,未经许可,严禁转载!

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅


    
  • 周排行榜
  • 月排行榜
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2007, ChinaByte
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i