tengo una matriz asociativa creado por un tipo de ROWTYPE de una columna de tabla.¿Por qué falla esta comprobación de matriz asociativa nula en PL/SQL?
Para dar un ejemplo, esto es lo que pasa (los nombres de las tablas son diferentes, pero la estructura es la misma):
Este es el DDL de la mesa
CREATE TABLE employees
(
id NUMBER,
name VARCHAR2(240),
salary NUMBER
);
Aquí es lo que mi procedimiento está haciendo:
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;
asumo debe resultado de "matriz asociativa nulo" que se está imprimiendo este . Sin embargo, la condición if
falla y la ejecución salta a la parte else.
Ahora si pongo en un bucle for
para imprimir los valores de la colección
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;
continuación, la unidad de programa lanza una excepción, refiriéndose a la de línea de bucle
ORA-06502: PL/SQL : Error numérico o de valor
que supongo es debido a la matriz asociativa nula. ¿Se está produciendo el error debido a una matriz asociativa nula?
¿Por qué es el primer cheque fallando entonces? ¿Qué estoy haciendo mal?
El servidor de base de datos es Oracle 11g EE (versión 11.2.0.3.0 64 bits)
No he hecho plsql desde hace tiempo, pero en su bucle ('dbms_output.put_line (nombre Emp: ' || Emp (i) .name); ') debe' Emp (i) .name' ser 'emp (i) .name'? –
@jschoen los nombres de las variables no distinguen entre mayúsculas y minúsculas, por lo que no importa – Sathya