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

ABOUT : 字符數組

2022-06-13   來源: Oracle 

  很長一段時間內PL/SQL開發人員必須有一個indexby表才能創建某個指定數據類型的或者PL/SQL記錄的表
  
  因為他們只接受整型數據以從數組中提取數據所以類型聲明的末尾子句以INDEX BY BINARY_INTEGER結束
  
  如果想以非整型值作為索引要麼你必須創建一個存儲過程來掃描需要的值要麼你必須在一個單獨的表上建立一個索引
  
  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表的語法允許字符串類型的索引叫做關聯數組
  
  有了字符串類型你現在就可以快速訪問元素而不用再在每個元素間循環或者去知道它在數組中的位置
  
  declare
  type valtbl is table of varchar() index by varchar();
  mytbl valtbl;
  begin
  mytbl(zhao) := apple;
  mytbl(zhao):= orange;
  dbms_outputput_line(mytbl(zhao));
  dbms_outputput_line(mytbl(zhao));
  end;
  
  使用字符串索引的關聯數組的一個有趣的特性是它們自動地通過當前的國際語言支持(NLS)設置排序
  
  FIRST和LAST函數返回數組中以字典序排列的第一個和最後一個健值NEXT和PRIOR允許你以字典序獲取下一個和前一個鍵
  
  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可以自動地將任何的數據類型轉換為字符串類型所以能以字符串作為索引意味著可以以任何數據類型作為索引
  
  你可以使用這個方法把日期浮點值行二進制值和對象引用作為索引
  
  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/18282.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.