Ini untuk menjalankan SQL dinamis asli .
Untuk DML, Anda akan menggunakannya saat menjalankan pernyataan yang tidak tersedia pada waktu kompilasi, mis. jika daftar kolom didasarkan pada pilihan dari pengguna.
Dalam kasus Anda, ini digunakan karena DDL tidak dapat dijalankan sebagai SQL statis dari dalam PL/SQL. Hanya permintaan tertentu, perintah DML, dan TCL yang valid . Hal lain harus diperlakukan sebagai dinamis.
Saya akan mengatakan jarang perlu menggunakan DDL dari blok PL/SQL. TRUNCATE
mungkin masuk akal; jika Anda menemukan sesuatu yang membuat atau menjatuhkan objek dengan cepat, hal itu mungkin lebih menjadi perhatian karena dapat menyarankan model data yang kurang optimal.
EXECUTE IMMEDIATE
sendiri tidak secara otomatis melakukan; tetapi jika Anda menjalankan DDL maka itu akan berperilaku sama seperti jika Anda menjalankannya di luar PL/SQL, jadi itu akan dilakukan dalam kasus Anda, ya.
Kebetulan, saya tidak yakin mengapa kode Anda menggunakan variabel perantara untuk menyimpan pernyataan; itu berguna jika Anda ingin menampilkan apa yang akan dijalankannya, tetapi sepertinya Anda tidak melakukannya. Apa yang Anda miliki dapat dilakukan sebagai:
EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';
yaitu tanpa menggunakan V_SQL_1
sama sekali.