我有一個由表列的rowtype類型創建的關聯數組。爲什麼檢查PL/SQL中的空關聯數組失敗?
舉個例子,這是怎麼回事(表名稱不同,但結構是一樣的):
這是表的DDL
CREATE TABLE employees
(
id NUMBER,
name VARCHAR2(240),
salary NUMBER
);
這裏是我的程序是這樣做的:
DECLARE
TYPE table_of_emp
IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp TABLE_OF_EMP;
BEGIN
IF emp IS NULL THEN
dbms_output.Put_line('Null associative array');
ELSE
dbms_output.Put_line('Not null');
END IF;
END;
我假定這個應該被印刷結果在「空關聯數組」。但是,if
條件失敗,執行跳轉到else部分。
現在,如果我把一個for
循環打印集合值
DECLARE
TYPE table_of_emp
IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp TABLE_OF_EMP;
BEGIN
IF emp IS NULL THEN
dbms_output.Put_line('Null associative array');
ELSE
dbms_output.Put_line('Not null');
FOR i IN emp.first..emp.last LOOP
dbms_output.Put_line('Emp name: '
|| Emp(i).name);
END LOOP;
END IF;
END;
那麼程序單元引發了異常,引用for循環線
ORA-06502:PL/SQL :數字或數值錯誤
我認爲這是因爲空關聯數組。是否因爲空關聯數組而引發錯誤?
那麼爲什麼第一次檢查失敗呢?我究竟做錯了什麼?
數據庫服務器的Oracle 11g EE(版本11.2.0.3.0 64位)
我沒有做過PLSQL一段時間,但在你的for循環('DBMS_OUTPUT.PUT_LINE(「的Emp名稱:」 || Emp(i).name);')'Emp(i).name'是'emp(i).name'? –
@jschoen變量名不區分大小寫,因此無關緊要 – Sathya