国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:34:27
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河津市| 泰和县| 许昌县| 郸城县| 华阴市| 成武县| 恭城| 大田县| 新晃| 毕节市| 丹阳市| 柳江县| 山西省| 土默特右旗| 秦皇岛市| 灌云县| 江陵县| 潮安县| 高密市| 澄城县| 梅河口市| 景东| 蒙自县| 西华县| 靖边县| 浮山县| 汉中市| 抚顺县| 庆城县| 东辽县| 湘乡市| 天等县| 景洪市| 东海县| 鄂托克旗| 应城市| 乐昌市| 右玉县| 仁怀市| 鹤壁市| 沙河市|