Je pro spouštění nativního dynamického SQL .
Pro DML byste jej použili při spouštění příkazů, které nemáte k dispozici v době kompilace, např. pokud je seznam sloupců založen na výběru uživatele.
Ve vašem případě se používá, protože DDL nelze spustit jako statický SQL z PL/SQL. Platné jsou pouze určité dotazy, příkazy DML a TCL . Cokoli jiného musí být považováno za dynamické.
Řekl bych, že je vzácné používat DDL z bloku PL/SQL. TRUNCATE
může být rozumné; pokud narazíte na něco, co vytváří nebo shazuje objekty za běhu, pak to může být spíše znepokojující, protože to může navrhnout suboptimální datový model.
EXECUTE IMMEDIATE
sám se automaticky nezavazuje; ale pokud spustíte DDL, bude se to chovat stejně, jako kdybyste jej spustili mimo PL/SQL, takže ve vašem případě dojde k potvrzení, ano.
Mimochodem, nejsem si jistý, proč váš kód používá k uložení příkazu přechodnou proměnnou; to je užitečné, pokud chcete zobrazit, co to poběží, ale nezdá se, že byste to dělali. To, co máte, můžete udělat jako:
EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';
tj. bez použití V_SQL_1
vůbec.