sql >> Database >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT versus IMMEDIATE UITVOEREN

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.



  1. Is het mogelijk om een ​​Oracle NUMBER type te overlopen?

  2. Retourwaarde van Oracle.DataAccess niet-query uitvoeren (opgeslagen procedure)

  3. Geneste Select-instructie in MYSQL-join

  4. PGError:Fout:kolom van relatie bestaat niet