sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué no se permite ddl estático en PL/SQL?

La respuesta es que PL/SQL no admite polimorfismo dinámico. solo admite polimorfismo estático porque

Todo PL/SQL genera una "DIANA" -> Notación atribuida intermedia descriptiva para Ada, un lenguaje intermedio estructurado en árbol. DIANA es utilizada internamente por los compiladores.

En el momento de la compilación, el código fuente PL/SQL se traduce al código del sistema y genera la DIANA correspondiente. Ahora piense si hubiera una declaración DDL como la declaración de creación de tabla que en el momento de la compilación no existe, se creará después de ejecutar el programa. ¿cómo generaría su motor PL/SQL una DIANA entonces????

DIANA juega un papel importante en PL/SQL para verificar/validar que el subprograma. esto es necesario porque, como sabemos, un subprograma puede usar objetos de base de datos como tablas, vistas, sinónimos u otros procesos almacenados. es posible que los objetos hayan cambiado/eliminado/caído la próxima vez que ejecute el programa. Por ejemplo:alguien podría haber dejado caer la tabla, el proceso almacenado o la firma de la función pueden haber cambiado.

Es por eso que generalmente se usa PL/SQL para manipular los datos dentro de la estructura de la base de datos, pero no para manipular esas estructuras.

pero hay formas de manipular usando SQL dinámico y el paquete DBMS_SQL, pero esta metodología nuevamente debe usarse con precaución. Por ejemplo, si está creando una tabla, primero debe verificar si esta tabla ya existe o si no usa las vistas del diccionario de datos.