Oracle12C--索引表(三十二)
- 索引表不存在遍歷操作!
-
由於索引表的索引號是非固定的,使用者可以通過"索引表物件.EXISTS()"函式進行驗證
- EXISTS()函式屬於集合函式;
-
它是啥?
- 索引表類似陣列,可以儲存多個數據,通過下標訪問每一個數據;
-
索引表與陣列的區別:
- 索引表的下標,可以用整數或字串來定義;
- 使用數字作為索引下標,可以設定為負數;
- 索引表不需要初始化,可以直接為指定索引賦值,開闢的索引表的索引不一定必須連續;
-
使用方式
- 語法:
TYPE 型別名稱 IS TABLE OF
資料型別 [NOT NULL] |
- 示例1:定義索引表
|
||
注意:使用索引表中不存在的索引號時,會出現:"ORA-01403:未找到任何資料"的異常 |
- 示例2:使用EXISTS()函式,來驗證索引
DECLARE TYPE info_index IS TABLE OF VARCHAR(20) INDEX BY PLS_INTEGER ; v_info info_index ; BEGIN v_info (1) := 'bing' ; v_info (10) := 'JAVA' ; IF v_info.EXISTS(10) THEN DBMS_OUTPUT.put_line(v_info(1)) ; END IF ; IF v_info.EXISTS(30) THEN DBMS_OUTPUT.put_line(v_info(30)) ; ELSE DBMS_OUTPUT.put_line('索引號為30的資料不存在!') ; END IF ; END ; / |
執行結果: bing 索引號為30的資料不存在! |
- 示例3:定義索引表,使用VARCHAR2作為下標索引
DECLARE TYPE info_index IS TABLE OF VARCHAR(50) INDEX BY VARCHAR2(30) ; v_info info_index ; BEGIN v_info ('公司名稱') := 'Oracle(bing)' ; v_info ('培訓專案') := 'JAVA-Android高階培訓' ; DBMS_OUTPUT.put_line(v_info('公司名稱')) ; DBMS_OUTPUT.put_line(v_info('培訓專案')) ; END ; / |
執行結果: Oracle(bing) JAVA-Android高階培訓 分析: ,而後所設定的索引下標長度應該在此範圍之內 |
- 示例4:定義ROWTYPE型的索引表
DECLARE TYPE dept_index IS TABLE OF dept%ROWTYPE INDEX BY PLS_INTEGER ; v_dept dept_index ; BEGIN v_dept(0).deptno := 80 ; v_dept(0).dname := 'Oracle' ; v_dept(0).loc := '北京' ; IF v_dept.EXISTS(0) THEN DBMS_OUTPUT.put_line('部門編號:' || v_dept(0).deptno || ',名稱:' || v_dept(0).dname || ',位置:' || v_dept(0).loc) ; END IF ; END ; / |
執行結果: |