У меня есть ассоциативный массив, созданный типом rowtype столбца таблицы.
Чтобы привести пример, так оно и есть (имена таблиц разные, но структура одинакова):
Это 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;
тогда программный блок вызывает исключение, ссылаясь на строку цикла
ORA-06502: PL/SQL: числовая или значная ошибка
который, как я полагаю, обусловлен нулевым ассоциативным массивом. Возникает ли ошибка из-за нулевого ассоциативного массива?
Так почему же первый сбой проверки? Что я делаю неправильно?
Сервер базы данных - это Oracle 11g EE (версия 11.2.0.3.0 64 бит)