Oracle
 sql >> Database >  >> RDS >> Oracle

PLS-00382:l'espressione è di tipo errato eseguendo la funzione e provando a inserire il tipo restituito in una variabile

Stai dichiarando il tipo di record, il tipo di raccolta/tabella e la funzione all'interno dello stesso pacchetto.

Quando chiami la funzione devi usare lo stesso tipo, da quel pacchetto.

Ma non lo è. Ha la stessa struttura - campi e tipi di dati - ma non è la stessa per quanto riguarda Oracle. Oracle deve saperlo esattamente viene utilizzato lo stesso tipo, in parte in modo che possa tenere traccia delle dipendenze tra gli oggetti.

Il tuo blocco anonimo deve fare riferimento ai tipi di pacchetto, piuttosto che dichiarare i propri - simili ma in conflitto - tipi:

DECLARE
    managers hr_package.managers_table_type;
BEGIN
    managers := hr_package.managers_multiple_departments;
END;

Come bonus comporta molto meno digitazione e significa che non devi gestire tipi duplicati.

Significa anche, tuttavia, che le dichiarazioni di tipo devono essere nelle specifiche del pacchetto, il che è il caso di qualsiasi cosa tu voglia essere pubblicamente visibile, ovviamente.