PL/SQL 索引表

genweihua發表於2015-09-08

       索引表也叫做關聯陣列,不過和陣列的區別就是沒有上限,允許連續擴充套件,其作為索引的下標可以BINARYBINARY_INTEGER,PLS_ INTEGER,在Oracle 9i之後,下標可以為Varchar2。還有一點,作為下標的值可以使不連續的,但是不能重複,也就是說新擴充套件的值對應的下標值在之前是不存在的。唯一的缺點是不能作為一列存在於資料庫中使用。

如下所示:

declare
  type out_type is table of varchar2(50) index by binary_integer;
  v_err out_type;
  type type_ename is table of varchar2(50) index by binary_integer;
  v_ename type_ename;
begin
  for cur in (select empno from emp) loop
  select ename,'輸入資訊測試' into v_ename(cur.empno),v_err(cur.empno) from emp where empno=cur.empno;
  end loop;
  for i in v_ename.first .. v_ename.last loop
    dbms_output.put_line(v_ename(i));
  end loop;
end;

執行的時候報如下錯誤:

ora-01403:未找到任何資料

ora-06512:在line 12


更改過之後如下:

declare
  type out_type is table of varchar2(50) index by binary_integer;
  v_err out_type;
  type type_ename is table of varchar2(50) index by binary_integer;
  v_ename type_ename;
begin
  for cur in (select empno from emp) loop
  select ename,'輸入資訊測試' into v_ename(cur.empno),v_err(cur.empno) from emp where empno=cur.empno;
   dbms_output.put_line(v_ename(cur.empno)||'--'||v_err(cur.empno));
  end loop;
end;

執行結果如下:

SMITH--輸入資訊測試
ALLEN--輸入資訊測試
WARD--輸入資訊測試
JONES--輸入資訊測試
MARTIN--輸入資訊測試
BLAKE--輸入資訊測試
CLARK--輸入資訊測試
KING--輸入資訊測試
TURNER--輸入資訊測試
JAMES--輸入資訊測試
FORD--輸入資訊測試
MILLER--輸入資訊測試

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22275400/viewspace-1794864/,如需轉載,請註明出處,否則將追究法律責任。

相關文章