Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT vs EXECUTE IMMEDIATE


Fundamentalmente, eles fazem a mesma coisa, que é fornecer um mecanismo para executar instruções DDL em PL/SQL, que não é suportado nativamente. Se a memória não me falha, o EXEC_DDL_STATEMENT estava disponível na versão Oracle 7 do pacote DBMS_UTILITY, enquanto o Native Dynamic SQL (EXECUTE IMMEDIATE) foi introduzido apenas na versão 8.

Existem algumas diferenças. EXECUTE IMMEDIATE trata principalmente da execução de SQL dinâmico (como seu alias NDS indica). o fato de que podemos usá-lo para DDL é por acaso. Considerando que EXEC_DDL_STATEMENT() - como sugere - só pode executar DDL.

Mas a versão DBMS_UTILITY não é mantida apenas para compatibilidade com versões anteriores, ela tem um truque legal que não podemos fazer com EXECUTE IMMEDIATE - executar DDL de forma distribuída. Podemos executar esta instrução de nosso banco de dados local para criar uma tabela em um banco de dados remoto (desde que nosso usuário tenha os privilégios necessários lá):
SQL>  exec [email protected]_db('create table t1 (id number)');

Não estou recomendando isso, apenas dizendo que pode ser feito.