sql >> Database teknologi >  >> RDS >> Oracle

Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT vs EXECUTE IMMEDIATE

Grundlæggende gør de det samme, som er at give en mekanisme til at udføre DDL-sætninger i PL/SQL, som ikke understøttes indbygget. Hvis hukommelsen tjener mig godt, var EXEC_DDL_STATEMENT tilgængelig i Oracle 7-versionen af ​​DBMS_UTILITY-pakken, hvorimod Native Dynamic SQL (EXECUTE IMMEDIATE) kun blev introduceret i 8.

Der er et par forskelle. EXECUTE IMMEDIATE handler primært om at udføre dynamisk SQL (som dets NDS-alias indikerer). det faktum, at vi kan bruge det til DDL, er ved siden af. Mens EXEC_DDL_STATEMENT() - som antydet - kun kan udføre DDL.

Men DBMS_UTILITY-versionen bibeholdes ikke kun for bagudkompatibilitet, den har et smart trick, vi ikke kan gøre med EXECUTE IMMEDIATE - at køre DDL på en distribueret måde. Vi kan køre denne erklæring fra vores lokale database for at oprette en tabel på en fjerndatabase (forudsat at vores bruger har de nødvendige rettigheder der):

SQL>  exec [email protected]_db('create table t1 (id number)');

Jeg anbefaler ikke dette, jeg siger bare, at det kan lade sig gøre.



  1. Openshift MySQL Communications Link Fejl

  2. Sådan konverteres UTC til lokal tid i MySQL

  3. Mysql:FEJL 1005 (HY000):Kan ikke oprette tabellen 'receitascakephp.recipes' (fejlnr:150)

  4. Hvordan returnerer man data hentet fra MySQL til en php-fil som JSON?