sql >> Databáze >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT vs. EXECUTE IMMEDIATE

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.



  1. postgresql 9.3. Seskupit podle bez všech sloupců

  2. Funkce NULLIF() v Oracle

  3. MySQL nastavilo hodnotu AUTO_INCREMENT na MAX(id) + 1 zkratka?

  4. Předání pole polí jako parametru funkci