PL/SQL关联数组

http://tech.ddvip.com   2008年05月27日    社区交流

内容摘要:当你想搜索某一个特定元素的值而不是整个数组的时候,PL/SQL关联数组对于名称-值对类型的数组是非常有用的。应用11g文档的话“它就像一个SQL表的简单版本,你可以基于主键的值来提取值”。

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

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

PL/SQL关联数组

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

  declare
  typeassoc_arristableofvarchar2(255)indexbyvarchar2(255);
  apollo_commandersassoc_arr;
  begin
  apollo_commanders('Apollo11':='NeilArmstrong';
  apollo_commanders('Apollo12':='PeteConrad';
  apollo_commanders('Apollo13':='JamesLovell';
  apollo_commanders('Apollo14':='AlanShepard';
  apollo_commanders('Apollo15':='DavidScott';
  apollo_commanders('Apollo16':='JohnW.Young';
  apollo_commanders('Apollo17':='EugeneA.Cernan';
  dbms_output.put_line(apollo_commanders('Apollo11'));
  dbms_output.put_line(apollo_commanders('Apollo14'));
  end;
  /
  –Results:
  –NeilArmstrong
  –AlanShepard

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

  declare
  typeassoc_arristableofvarchar2(255)indexbyvarchar2(255);
  apollo_commandersassoc_arr;
  l_current_missionvarchar2(255);
  begin
  apollo_commanders('Apollo11':='NeilArmstrong';
  apollo_commanders('Apollo12':='PeteConrad';
  apollo_commanders('Apollo13':='JamesLovell';
  apollo_commanders('Apollo14':='AlanShepard';
  apollo_commanders('Apollo15':='DavidScott';
  apollo_commanders('Apollo16':='JohnW.Young';
  apollo_commanders('Apollo17':='EugeneA.Cernan';
  l_current_mission:=apollo_commanders.first;
  loop
  exitwhenl_current_missionisnull;
  dbms_output.put_line('Mission:'||l_current_mission||',Commander:'||apollo_commanders(l_current_mission));
  l_current_mission:=apollo_commanders.next(l_current_mission);
  endloop;
  end;
  /
  –Results:
  –Mission:Apollo11,Commander:NeilArmstrong
  –Mission:Apollo12,Commander:PeteConrad
  –Mission:Apollo13,Commander:JamesLovell
  –Mission:Apollo14,Commander:AlanShepard
  –Mission:Apollo15,Commander:DavidScott
  –Mission:Apollo16,Commander:JohnW.Young
  –Mission:Apollo17,Commander:EugeneA.Cernan

来源:IT专家网    作者:戴羽    责编:豆豆技术应用

正在加载评论...