U declareert het recordtype, het verzamelings-/tabeltype en de functie allemaal binnen hetzelfde pakket.
Als je de functie aanroept, moet je hetzelfde type gebruiken, uit dat pakket.
Maar dat is het niet. Het heeft dezelfde structuur - velden en datatypes - maar is niet hetzelfde wat Oracle betreft. Oracle moet weten dat precies hetzelfde type wordt gebruikt, deels zodat het afhankelijkheden tussen objecten kan bijhouden.
Uw anonieme blokkering moet verwijzen naar de pakkettypes, in plaats van zijn eigen - vergelijkbare maar tegenstrijdige - type(s) te declareren:
DECLARE
managers hr_package.managers_table_type;
BEGIN
managers := hr_package.managers_multiple_departments;
END;
Als bonus hoef je minder te typen en hoef je geen dubbele typen te beheren.
Het betekent echter ook dat de typedeclaraties in de pakketspecificatie moeten staan - wat natuurlijk het geval is voor alles wat je openbaar zichtbaar wilt maken.