【发布时间】:2012-09-06 21:06:02
【问题描述】:
我有一个由表列的一种行类型创建的关联数组。
举个例子,是这样的(表名不同,但结构相同):
这是表的 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 name: ' || Emp(i).name);)应该Emp(i).name是emp(i).name吗? -
@jschoen 变量名不区分大小写,所以没关系
标签: oracle plsql oracle11g associative-array