熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

使用PL/SQL關聯數組訪問元素

2013-11-13 22:14:20  來源: Oracle 

  很長一段時間內PL/SQL開發人員必須有一個indexby表才能創建某個指定數據類型的或者PL/SQL記錄的表因為他們只接受整型數據以從數組中提取數據所以類型聲明的末尾子句以INDEX BY BINARY_INTEGER結束如果想以非整型值作為索引要麼你必須創建一個存儲過程來掃描需要的值要麼你必須在一個單獨的表上建立一個索引
  
  
  
  set serveroutput on
  declare
   type valrec is record(key varchar()val varchar());
   type valtbl is table of valrec index by binary_integer;
   mytbl valtbl;
  begin
   mytbl()key := foo;
   mytbl()val := bar;
   for i in unt loop
   if mytbl(i)key = foo then
   dbms_outputput_line(mytbl(i)val);
   end if;
   end loop;
  end;
  /
  
  PL/SQL允許使用indexby表創建某個指定數據類型或者PL/SQL記錄的表然而如果想以非整型值作為索引要麼你必須創建一個存儲過程掃描你需要的值要麼你必須在一個單獨的表上建立一個索引Oraclei擴展了indexby表的語法允許字符串類型的索引叫做關聯數組
  
  有了字符串類型你現在就可以快速訪問元素而不用再在每個元素間循環或者去知道它在數組中的位置
  
  set serveroutput on
  declare
   type valtbl is table of varchar() index by varchar();
   mytbl valtbl;
  begin
   mytbl(foo) := bar;
   dbms_outputput_line(mytbl(foo));
  end;
  /
  
  使用字符串索引的關聯數組的一個有趣的特性是它們自動地通過當前的國際語言支持(NLS)設置排序FIRST和LAST函數返回數組中以字典序排列的第一個和最後一個健值NEXT和PRIOR允許你以字典序獲取下一個和前一個鍵
  
  set serveroutput on
  declare
   type valtbl is table of varchar() index by varchar();
   mytbl valtbl;
   key varchar();
  begin
   mytbl(b) := two;
   mytbl(a) := one;
   mytbl(c) := three;
   key := mytblfirst;
   while key is not null loop
   dbms_outputput_line(mytbl(key));
   key := mytblnext(key);
   end loop;
  end;
  /
  
  因為Oracle可以自動地將任何的數據類型轉換為字符串類型所以能以字符串作為索引意味著可以以任何數據類型作為索引你可以使用這個方法把日期浮點值行二進制值和對象引用作為索引
  
  set serveroutput on
  declare
   type timetbl is table of integer index by varchar();
   mytbl timetbl;
   key varchar();
  begin
   for row in (select * from emp) loop
   key := to_char(rowhiredateYYYYMMDD);
   if not mytblexists(key) then
   mytbl(key) := ;
   end if;
   mytbl(key) := mytbl(key) + ;
   end loop;
   dbms_outputput_line(hiring barchart:);
   dbms_outputput_line();
   key := mytblfirst;
   while key is not null loop
   dbms_outputput_line(
   to_char(to_date(keyYYYYMMDD)DD MON YYYY)
   ||: ||rpad(#mytbl(key)#));
   key := mytblnext(key);
   end loop;
  end;
  /
  
  鍵值必須是唯一的並且是大小寫敏感的在運行時改變NLS值可能會產生運行時錯誤對於關聯數組的每一個操作NLS設置必須保持相同
  
  關聯數組必須在PL/SQL代碼中手工建立其它的程序開發語言和接口不能把主機數組綁定到並聯數組所以你就不能用字符串索引的關聯數組使用BULK COLLECT

From:http://tw.wingwit.com/Article/program/Oracle/201311/18565.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.