Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

PLS-00382:a expressão é do tipo errado ao executar a função e tentar colocar o tipo de retorno em uma variável


Você está declarando o tipo de registro, tipo de coleção/tabela e função tudo dentro do mesmo pacote.

Quando você chama a função você tem que usar o mesmo tipo, daquele pacote.

Mas não é. Ele tem a mesma estrutura - campos e tipos de dados - mas não é o mesmo no que diz respeito ao Oracle. A Oracle precisa saber que exatamente o mesmo tipo está sendo usado, em parte para que possa acompanhar as dependências entre os objetos.

Seu bloco anônimo precisa se referir aos tipos de pacote, em vez de declarar seus próprios - semelhantes, mas conflitantes - tipo(s):
DECLARE
    managers hr_package.managers_table_type;
BEGIN
    managers := hr_package.managers_multiple_departments;
END;

Como bônus, envolve muito menos digitação e significa que você não precisa gerenciar tipos duplicados.

Isso também significa, no entanto, que as declarações de tipo devem estar na especificação do pacote - o que é o caso de qualquer coisa que você queira que seja visível publicamente, é claro.