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

Oracle:¿Qué significa 'ejecutar inmediatamente'?

Es para ejecutar SQL dinámico nativo. .

Para DML, lo usaría al ejecutar declaraciones que no tiene disponibles en tiempo de compilación, p. si la lista de columnas se basa en una selección del usuario.

En su caso, se está utilizando porque DDL no se puede ejecutar como SQL estático desde PL/SQL. Solo ciertos comandos de consulta, DML y TCL son válidos . Todo lo demás debe tratarse como dinámico.

Diría que es raro necesitar usar DDL desde un bloque PL/SQL. TRUNCATE podría ser razonable; si encuentra algo que crea o suelta objetos sobre la marcha, eso podría ser más preocupante, ya que puede sugerir un modelo de datos subóptimo.

EXECUTE IMMEDIATE en sí mismo no se compromete automáticamente; pero si ejecuta DDL, se comportará igual que si lo ejecutara fuera de PL/SQL, por lo que se confirmará en su caso, sí.

Por cierto, no estoy seguro de por qué su código usa una variable intermedia para contener la declaración; eso es útil si desea mostrar lo que se ejecutará tal vez, pero no parece estar haciendo eso. Lo que tienes se podría hacer como:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

es decir, sin usar V_SQL_1 en absoluto.