É 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.