基本的には同じことを行います。つまり、ネイティブでサポートされていないPL/SQLでDDLステートメントを実行するメカニズムを提供します。メモリが十分に機能する場合、EXEC_DDL_STATEMENTはDBMS_UTILITYパッケージのOracle 7バージョンで使用可能でしたが、ネイティブ動的SQL(EXECUTE IMMEDIATE)は8でのみ導入されました。
いくつかの違いがあります。 EXECUTE IMMEDIATEは、主に動的SQLの実行に関するものです(NDSエイリアスが示すように)。 DDLに使用できるという事実は、バイバイバイです。一方、EXEC_DDL_STATEMENT()は、示唆されているように、DDLのみを実行できます。
ただし、DBMS_UTILITYバージョンは、下位互換性のためだけに保持されるのではなく、EXECUTEIMMEDIATEでは実行できない巧妙なトリックが1つあります。それは分散方式でDDLを実行することです。ローカルデータベースからこのステートメントを実行して、リモートデータベースにテーブルを作成できます(ユーザーに必要な権限がある場合):
SQL> exec [email protected]_db('create table t1 (id number)');
私はこれをお勧めしません、ただそれができると言っています。