Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:Co oznacza „wykonaj natychmiast”?

Służy do uruchamiania natywnego dynamicznego SQL .

W przypadku DML użyjesz go podczas uruchamiania instrukcji, które nie są dostępne w czasie kompilacji, np. jeśli lista kolumn jest oparta na wyborze dokonanym przez użytkownika.

W twoim przypadku jest używany, ponieważ DDL nie może być uruchamiany jako statyczny SQL z poziomu PL/SQL. Tylko niektóre zapytania, polecenia DML i TCL są prawidłowe . Wszystko inne należy traktować jako dynamiczne.

Powiedziałbym, że rzadko trzeba używać DDL z bloku PL/SQL. TRUNCATE może być rozsądne; jeśli znajdziesz coś, co tworzy lub upuszcza obiekty w locie, może to być bardziej niepokojące, ponieważ może sugerować nieoptymalny model danych.

EXECUTE IMMEDIATE sam nie zatwierdza automatycznie; ale jeśli wykonasz DDL, to będzie zachowywać się tak samo, jak gdybyś uruchomił go poza PL/SQL, więc w twoim przypadku zostanie zatwierdzony, tak.

Nawiasem mówiąc, nie jestem pewien, dlaczego twój kod używa zmiennej pośredniej do przechowywania instrukcji; jest to przydatne, jeśli chcesz wyświetlić, co może być uruchomione, ale wydaje się, że tego nie robisz. To, co masz, można zrobić jako:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

czyli bez użycia V_SQL_1 w ogóle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaimplementować ten wyzwalacz w Oracle SQL?

  2. Jak rozwiązać ORA-28000 konto jest zablokowane?

  3. Jak rejestrować/śledzić wywołania procedury składowanej Oracle z wartościami parametrów?

  4. Oracle ORA-30004 przy użyciu funkcji SYS_CONNECT_BY_PATH,

  5. Oracle — WYBIERZ DENSE_RANK OVER (ORDER BY, SUM, OVER i PARTITION BY)