sql >> Database >  >> RDS >> Oracle

PLS-00382:uitdrukking is van het verkeerde type door de functie uit te voeren en het retourtype in een variabele te plaatsen

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.




  1. Een werk plannen om op een bepaald tijdstip te draaien met dbms_scheduler

  2. SQL-query, 5 meest recente selecteren in elke groep

  3. Postgres 9.4 loopt vast tijdens het vernieuwen van de gematerialiseerde weergave

  4. Hoe datetime te vergelijken met alleen datum in SQL Server