Ho una matrice associativa creata da un tipo di rowtype di una colonna di tabella.Perché questo controllo per array associativo nullo in PL/SQL non riesce?
Per fare un esempio, questo è come è (i nomi delle tabelle sono diversi, ma la struttura è la stessa):
Questo è il DDL del tavolo
CREATE TABLE employees
(
id NUMBER,
name VARCHAR2(240),
salary NUMBER
);
Ecco ciò che il mio procedura sta facendo:
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;
presumo che ciò dovrebbe risultato in "array associativo Null" in fase di stampa. Tuttavia, la condizione if
non riesce e l'esecuzione salta alla parte else.
Ora, se ho messo in un ciclo for
per stampare i valori della collezione
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;
allora l'unità del programma solleva un'eccezione, facendo riferimento il ciclo for linea di
ORA-06502: PL/SQL : Errore numerico o valore
che presumo sia dovuto alla matrice associativa nulla. L'errore viene generato a causa dell'array associativo nullo?
Quindi perché il primo controllo non è riuscito? Che cosa sto facendo di sbagliato?
Il server di database è Oracle 11g EE (versione 11.2.0.3.0 64 bit)
non ho fatto plsql in un po ', ma nel tuo ciclo for ('dbms_output.put_line ('nome Emp:' || Emp (i) .name); ') dovrebbe' Emp (i) .name' essere 'emp (i) .name'? –
I nomi delle variabili @jschoen non fanno distinzione tra maiuscole e minuscole, quindi non importa – Sathya