Oracle
 sql >> Datenbank >  >> RDS >> Oracle

PLS-00382:Der Ausdruck hat den falschen Typ, wenn die Funktion ausgeführt wird, und versuchen Sie, den Rückgabetyp in eine Variable einzufügen

Sie deklarieren den Datensatztyp, den Sammlungs-/Tabellentyp und die Funktion alle innerhalb desselben Pakets.

Wenn Sie die Funktion aufrufen, müssen Sie denselben Typ aus diesem Paket verwenden.

Aber das ist es nicht. Es hat die gleiche Struktur – Felder und Datentypen – ist aber nicht gleich, soweit es Oracle betrifft. Oracle muss das genau wissen derselbe Typ wird verwendet, teilweise um Abhängigkeiten zwischen Objekten verfolgen zu können.

Ihr anonymer Block muss sich auf die Pakettypen beziehen, anstatt seine eigenen – ähnlichen, aber widersprüchlichen – Typen zu deklarieren:

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

Als Bonus erfordert es viel weniger Eingaben und bedeutet, dass Sie keine doppelten Typen verwalten müssen.

Es bedeutet aber auch, dass die Typdeklarationen in der Paketspezifikation stehen müssen – was natürlich für alles gilt, was öffentlich sichtbar sein soll.