V zásadě dělají totéž, což je poskytnout mechanismus pro provádění příkazů DDL v PL/SQL, který není nativně podporován. Pokud mi paměť neklame dobře, EXEC_DDL_STATEMENT byl dostupný ve verzi Oracle 7 balíčku DBMS_UTILITY, zatímco Native Dynamic SQL (EXECUTE IMMEDIATE) byl představen až v 8.
Existuje několik rozdílů. EXECUTE IMMEDIATE je hlavně o provádění dynamického SQL (jak naznačuje jeho alias NDS). skutečnost, že jej můžeme použít pro DDL, je mimochodem. Zatímco EXEC_DDL_STATEMENT() - jak naznačuje - může provádět pouze DDL.
Verze DBMS_UTILITY však není zachována jen kvůli zpětné kompatibilitě, má jeden úhledný trik, který nemůžeme udělat s EXECUTE IMMEDIATE – spuštění DDL distribuovaným způsobem. Tento příkaz můžeme spustit z naší lokální databáze a vytvořit tabulku ve vzdálené databázi (za předpokladu, že tam náš uživatel má potřebná oprávnění):
SQL> exec [email protected]_db('create table t1 (id number)');
Nedoporučuji to, jen říkám, že to lze udělat.