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