Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT vs EXECUTE IMMEDIATE

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menjalankan kueri mentah dengan kembali di sqlalchemy

  2. Apakah fungsi CURRENT_TIMESTAMP Oracle benar-benar sebuah fungsi?

  3. cara untuk menghindari tabel temp global di Oracle

  4. Membuat pekerjaan DBMS_SCHEDULER untuk Oracle

  5. pengecualian pyodbc args memiliki beberapa karakter yang tidak dikenal