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

Oracle:Co znamená „provést okamžitě“?

Je pro spouštění nativního dynamického SQL .

Pro DML byste jej použili při spouštění příkazů, které nemáte k dispozici v době kompilace, např. pokud je seznam sloupců založen na výběru uživatele.

Ve vašem případě se používá, protože DDL nelze spustit jako statický SQL z PL/SQL. Platné jsou pouze určité dotazy, příkazy DML a TCL . Cokoli jiného musí být považováno za dynamické.

Řekl bych, že je vzácné používat DDL z bloku PL/SQL. TRUNCATE může být rozumné; pokud narazíte na něco, co vytváří nebo shazuje objekty za běhu, pak to může být spíše znepokojující, protože to může navrhnout suboptimální datový model.

EXECUTE IMMEDIATE sám se automaticky nezavazuje; ale pokud spustíte DDL, bude se to chovat stejně, jako kdybyste jej spustili mimo PL/SQL, takže ve vašem případě dojde k potvrzení, ano.

Mimochodem, nejsem si jistý, proč váš kód používá k uložení příkazu přechodnou proměnnou; to je užitečné, pokud chcete zobrazit, co to poběží, ale nezdá se, že byste to dělali. To, co máte, můžete udělat jako:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

tj. bez použití V_SQL_1 vůbec.



  1. Nelze se připojit k databázovému serveru (pracovní plocha mysql)

  2. Přístup Spring Boot MySql odepřen uživateli 'root'@'localhost'

  3. Nakonfigurujte poštovní server pro práci s PHP

  4. Levé spojení s názvem dynamické tabulky odvozeným ze sloupce