In wezen doen ze hetzelfde, namelijk een mechanisme bieden om DDL-instructies in PL/SQL uit te voeren, wat niet standaard wordt ondersteund. Als het geheugen me goed van pas komt, was de EXEC_DDL_STATEMENT beschikbaar in de Oracle 7-versie van het DBMS_UTILITY-pakket, terwijl Native Dynamic SQL (EXECUTE IMMEDIATE) pas in 8 werd geïntroduceerd.
Er zijn een paar verschillen. EXECUTE IMMEDIATE gaat voornamelijk over het uitvoeren van dynamische SQL (zoals de NDS-alias aangeeft). het feit dat we het kunnen gebruiken voor DDL is by-the-by. Terwijl EXEC_DDL_STATEMENT() - zoals het suggereert - alleen DDL kan uitvoeren.
Maar de DBMS_UTILITY-versie wordt niet alleen bewaard voor achterwaartse compatibiliteit, het heeft een handige truc die we niet kunnen doen met IMMEDIATE UITVOEREN - DDL op een gedistribueerde manier uitvoeren. We kunnen deze verklaring uitvoeren vanuit onze lokale database om een tabel op een externe database te maken (op voorwaarde dat onze gebruiker daar de nodige rechten heeft):
SQL> exec [email protected]_db('create table t1 (id number)');
Ik raad dit niet aan, ik zeg alleen dat het kan.