Vous déclarez le type d'enregistrement, le type de collection/table et la fonction dans le même package.
Lorsque vous appelez la fonction, vous devez utiliser le même type, à partir de ce package.
Mais ce n'est pas le cas. Il a la même structure - champs et types de données - mais n'est pas le même en ce qui concerne Oracle. Oracle doit savoir que exactement le même type est utilisé, en partie pour pouvoir suivre les dépendances entre les objets.
Votre bloc anonyme doit faire référence aux types de packages, plutôt que de déclarer ses propres types - similaires mais conflictuels - :
DECLARE
managers hr_package.managers_table_type;
BEGIN
managers := hr_package.managers_multiple_departments;
END;
En prime, cela implique beaucoup moins de saisie et signifie que vous n'avez pas à gérer les types en double.
Cela signifie également, cependant, que les déclarations de type doivent être dans la spécification du package - ce qui est le cas pour tout ce que vous voulez voir publiquement, bien sûr.