Svaret er, at PL/SQL ikke understøtter dynamisk polymorfi. den understøtter kun statisk polymorfi, fordi
Alle PL/SQL genererer en "DIANA" -> Descriptive Intermediate Attributed Notation for Ada , et træstruktureret mellemsprog. DIANA bruges internt af compilere.
På kompileringstidspunktet oversættes PL/SQL-kildekoden til systemkode og genererer tilsvarende DIANA. Tænk nu, hvis der var en DDL-sætning som create table-sætning, som på kompileringstidspunktet ikke eksisterer, vil den blive oprettet efter at have kørt programmet. hvordan ville din PL/SQL-motor generere en DIANA så ????
DIANA spiller en vigtig rolle i PL/SQL for at kontrollere/validere at underprogrammet. dette er påkrævet, fordi som vi ved, at et underprogram kan bruge databaseobjekter såsom tabeller, visninger, synonymer eller andre lagrede procs. det kan være muligt, at objekterne kan være ændret/fjernet/faldet, næste gang du kører programmet. For eksempel:nogen kan have droppet bordet, den lagrede proc eller funktionssingnatur kan have ændret sig.
Det er derfor generelt PL/SQL bruges til at manipulere data i databasestrukturen, men ikke til at manipulere disse strukturer.
men der er måder at manipulere ved hjælp af dynamisk SQL og DBMS_SQL-pakke, men disse metoder skal igen bruges med forsigtighed. Hvis du f.eks. opretter en tabel, skal du først kontrollere, om denne tabel allerede eksisterer eller ikke bruger dataordbogsvisninger.