sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Vad betyder "kör omedelbart"?

Det är för att köra inbyggd dynamisk SQL .

För DML skulle du använda det när du kör satser som du inte har tillgängliga vid kompilering, t.ex. om kolumnlistan är baserad på ett urval från användaren.

I ditt fall används den eftersom DDL inte kan köras som statisk SQL från PL/SQL. Endast vissa fråge-, DML- och TCL-kommandon är giltiga . Allt annat måste behandlas som dynamiskt.

Jag skulle säga att det är ovanligt att behöva använda DDL från ett PL/SQL-block. TRUNCATE kan vara rimligt; om du hittar något som skapar eller tappar objekt i farten kan det vara mer bekymmersamt eftersom det kan föreslå en suboptimal datamodell.

EXECUTE IMMEDIATE själv begår inte automatiskt; men om du kör DDL kommer det att fungera på samma sätt som om du körde det utanför PL/SQL, så det kommer att commit i ditt fall, ja.

Jag är för övrigt inte säker på varför din kod använder en mellanvariabel för att hålla påståendet; det är användbart om du vill visa vad det kommer att köra kanske, men du verkar inte göra det. Det du har kan göras som:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

d.v.s. utan att använda V_SQL_1 överhuvudtaget.



  1. Oracle-databasfel i symfony2 (doktrin). Är parameters.yml korrekt inställd?

  2. Demonstrera SQL-injektion i PL/pgSQL

  3. hur man skriver en json-fil som en datakälla i php?

  4. MySQL Select Query - Få bara de första 10 tecknen i ett värde