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

Oracle:Hvad betyder 'udfør øjeblikkeligt'?

Det er til at køre indbygget dynamisk SQL .

For DML ville du bruge det, når du kører sætninger, som du ikke har til rådighed på kompileringstidspunktet, f.eks. hvis kolonnelisten er baseret på et valg fra brugeren.

I dit tilfælde bliver det brugt, fordi DDL ikke kan køres som statisk SQL fra PL/SQL. Kun visse forespørgsels-, DML- og TCL-kommandoer er gyldige . Alt andet skal behandles som dynamisk.

Jeg vil sige, at det er sjældent at skulle bruge DDL fra en PL/SQL-blok. TRUNCATE kan være rimeligt; hvis du finder noget, der skaber eller taber objekter i farten, kan det være mere bekymrende, da det kan foreslå en suboptimal datamodel.

EXECUTE IMMEDIATE selv forpligter sig ikke automatisk; men hvis du udfører DDL, vil det opføre sig på samme måde, som hvis du kørte det uden for PL/SQL, så det vil commit i dit tilfælde, ja.

Jeg er i øvrigt ikke sikker på, hvorfor din kode bruger en mellemvariabel til at holde sætningen; det er nyttigt, hvis du måske vil vise, hvad det skal køre, men du ser ikke ud til at gøre det. Det, du har, kunne gøres som:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

dvs. uden at bruge V_SQL_1 overhovedet.



  1. Sådan skriver du joinforespørgsel i Volusion API

  2. Opretter du en linket liste eller lignende kø i MySQL?

  3. Sådan vælger du specifikke værdier fra XML ved hjælp af Oracle Xquery

  4. Transaktionsloggen for databasen er fuld