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

Oracle:O que significa 'executar imediatamente'?


É para executar o SQL dinâmico nativo .

Para DML, você o usaria ao executar instruções que não estão disponíveis em tempo de compilação, por exemplo. se a lista de colunas for baseada em uma seleção do usuário.

No seu caso, está sendo usado porque o DDL não pode ser executado como SQL estático de dentro do PL/SQL. Apenas certos comandos de consulta, DML e TCL são válidos . Qualquer outra coisa deve ser tratada como dinâmica.

Eu diria que é raro precisar usar DDL de um bloco PL/SQL. TRUNCATE pode ser razoável; se você encontrar algo criando ou soltando objetos em tempo real, isso pode ser mais uma preocupação, pois pode sugerir um modelo de dados abaixo do ideal.

EXECUTE IMMEDIATE em si não se compromete automaticamente; mas se você executar o DDL, isso se comportará da mesma forma que se você o executasse fora do PL/SQL, portanto, ele será confirmado no seu caso, sim.

Aliás, não sei por que seu código está usando uma variável intermediária para manter a instrução; isso é útil se você quiser exibir o que vai rodar talvez, mas você não parece estar fazendo isso. O que você tem pode ser feito como:
EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

ou seja, sem usar V_SQL_1 de forma alguma.