Pada dasarnya mereka melakukan hal yang sama, yaitu menyediakan mekanisme untuk mengeksekusi pernyataan DDL di PL/SQL, yang tidak didukung secara asli. Jika ingatan saya baik, EXEC_DDL_STATEMENT tersedia dalam versi Oracle 7 dari paket DBMS_UTILITY, sedangkan Native Dynamic SQL (EXECUTE IMMEDIATE) hanya diperkenalkan di 8.
Ada beberapa perbedaan. EXECUTE IMMEDIATE terutama tentang menjalankan SQL dinamis (seperti yang ditunjukkan oleh alias NDS). fakta bahwa kita dapat menggunakannya untuk DDL adalah by-the-by. Sedangkan EXEC_DDL_STATEMENT() - seperti yang disarankan - hanya dapat mengeksekusi DDL.
Tetapi versi DBMS_UTILITY tidak dipertahankan hanya untuk kompatibilitas mundur, ia memiliki satu trik rapi yang tidak dapat kita lakukan dengan EXECUTE IMMEDIATE - menjalankan DDL secara terdistribusi. Kami dapat menjalankan pernyataan ini dari database lokal kami untuk membuat tabel pada database jarak jauh (asalkan pengguna kami memiliki hak istimewa yang diperlukan di sana):
SQL> exec [email protected]_db('create table t1 (id number)');
Saya tidak merekomendasikan ini, hanya mengatakan itu bisa dilakukan.