Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT срещу EXECUTE IMMEDIATE

По същество те правят едно и също нещо, което е да осигурят механизъм за изпълнение на DDL изрази в PL/SQL, който не се поддържа първоначално. Ако паметта не ме лъже, EXEC_DDL_STATEMENT беше наличен във версията на Oracle 7 на пакета DBMS_UTILITY, докато Native Dynamic SQL (EXECUTE IMMEDIATE) беше въведен само в 8.

Има няколко разлики. EXECUTE IMMEDIATE е главно за изпълнение на динамичен SQL (както показва псевдонимът му на NDS). фактът, че можем да го използваме за DDL, е самостоятелен. Докато EXEC_DDL_STATEMENT() - както предполага - може да изпълнява само DDL.

Но версията на DBMS_UTILITY не се запазва само за обратна съвместимост, тя има един чист трик, който не можем да направим с EXECUTE IMMEDIATE - изпълняване на DDL по разпределен начин. Можем да изпълним този оператор от нашата локална база данни, за да създадем таблица в отдалечена база данни (при условие, че нашият потребител има необходимите привилегии там):

SQL>  exec [email protected]_db('create table t1 (id number)');
SQL> exec _db('създайте таблица t1 (id номер)');

Не препоръчвам това, просто казвам, че може да се направи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - зомби маса

  2. Oracle сравнява времеви печат с дата

  3. Някакво въздействие върху производителността в Oracle за използване LIKE 'string' vs ='string'?

  4. Как да преброя броя на непоследователните стойности в колона с помощта на SQL?

  5. Управление на CDB флот в Oracle Database 18c