По сути, они делают то же самое, то есть предоставляют механизм для выполнения операторов DDL в PL / SQL, который изначально не поддерживается.Если память мне не помешает, EXEC_DDL_STATEMENT был доступен в версии Oracle 7 пакета DBMS_UTILITY, тогда как собственный динамический SQL (EXECUTE IMMEDIATE) был введен только в 8.
Есть несколько отличий.EXECUTE IMMEDIATE в основном предназначен для выполнения динамического SQL (как указывает его имя NDS).тот факт, что мы можем использовать его для DDL, является последним.
Но версия DBMS_UTILITY не сохранена только для обратной совместимости, у нее есть одна хитрость, которую мы не можем сделать с EXECUTE IMMEDIATE - запуск DDL в распределенном режиме.Мы можем запустить этот оператор из нашей локальной базы данных, чтобы создать таблицу в удаленной базе данных (при условии, что у нашего пользователя есть необходимые привилегии):
SQL> exec DBMS_UTILITY.EXEC_DDL_STATEMENT@remote_db('create table t1 (id number)');
Я не рекомендую это, просто скажу, что это можно сделать.