Oracle
 sql >> Database >  >> RDS >> Oracle

Perché ddl statico non è consentito in PL/SQL?

La risposta è PL/SQL non supporta il polimorfismo dinamico. supporta solo il polimorfismo statico perché

Tutti i PL/SQL generano una "DIANA" -> Descriptive Intermediate Attributed Notation per Ada , un linguaggio intermedio strutturato ad albero. DIANA viene utilizzato internamente dai compilatori.

In fase di compilazione, il codice sorgente PL/SQL viene tradotto nel codice di sistema e genera il DIANA corrispondente. Ora pensa che se ci fosse un'istruzione DDL come l'istruzione create table che al momento della compilazione non esiste, verrà creata dopo aver eseguito il programma. in che modo il tuo motore PL/SQL genererebbe un DIANA allora ????

DIANA svolge un ruolo importante in PL/SQL per verificare/convalidare che il sottoprogramma. questo è necessario perché, come sappiamo, un sottoprogramma può utilizzare oggetti di database come tabelle, viste, sinonimi o altri processi memorizzati. potrebbe essere possibile che gli oggetti siano stati modificati/rimossi/eliminati la prossima volta che si esegue il programma. Ad esempio:qualcuno potrebbe aver eliminato la tabella, il processo memorizzato o la singnature della funzione potrebbero essere cambiati.

Ecco perché generalmente PL/SQL viene utilizzato per manipolare i dati all'interno della struttura del database, ma non per manipolare tali strutture.

ma ci sono modi per manipolare usando SQL dinamico e pacchetto DBMS_SQL, ma anche questa metodologia dovrebbe essere usata con cautela. Ad esempio, se stai creando una tabella, devi prima controllare se questa tabella esiste già o se non utilizza le viste del dizionario dei dati.