sql >> Base de Datos >  >> RDS >> Oracle

PLS-00382:la expresión es de tipo incorrecto al ejecutar la función e intentar poner el tipo de retorno en una variable

Está declarando el tipo de registro, el tipo de colección/tabla y la función, todo dentro del mismo paquete.

Cuando llama a la función, debe usar el mismo tipo, de ese paquete.

Pero no lo es. Tiene la misma estructura (campos y tipos de datos), pero no es lo mismo en lo que respecta a Oracle. Oracle necesita saber eso exactamente se está utilizando el mismo tipo, en parte para que pueda realizar un seguimiento de las dependencias entre objetos.

Su bloque anónimo debe hacer referencia a los tipos de paquetes, en lugar de declarar su propio tipo (similar pero conflictivo):

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

Como beneficio adicional, requiere mucho menos tipeo y significa que no tiene que administrar tipos duplicados.

Sin embargo, también significa que las declaraciones de tipo deben estar en la especificación del paquete, que es el caso de cualquier cosa que desee que sea visible públicamente, por supuesto.