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

Jak wywołać procedurę, która używa tej samej tabeli w po wyzwalaczu?

Nie możesz.

Zwykły wyzwalacz na poziomie wiersza nie może wysłać zapytania do tabeli, w której jest zdefiniowany wyzwalacz, ponieważ spowodowałoby to zgłoszenie mutującego wyjątku tabeli. Zakładam, że właśnie dlatego zadeklarowałeś wyzwalacz, aby używał transakcji autonomicznej (transakcja autonomiczna dla czegokolwiek innego niż trwałe rejestrowanie jest prawie na pewno błędem). Jeśli jednak to zrobisz, Twój wyzwalacz nie będzie mógł zobaczyć niezatwierdzonych zmian wprowadzonych przez transakcję wyzwalającą. To jest problem, który teraz napotykasz.

Alternatywą byłoby użycie wyzwalacza złożonego . Zadeklarowałbyś kolekcję test_table.type_%type , należy dodać wartości, które zmieniają się do tej kolekcji, w części wyzwalacza na poziomie wiersza, a następnie wykonać iterację elementów w kolekcji w części wyzwalacza po instrukcji. Wyzwalacz na poziomie instrukcji może wysyłać zapytania do tabeli, dla której zdefiniowano wyzwalacz, dzięki czemu można wywołać procedurę z części wyzwalacza złożonego następującej po instrukcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie w Oracle o uruchomienie sum

  2. pobierz kolumnę z małymi literami z zestawu wyników, używając nazwy kolumny

  3. Jak uciec od pojedynczych cudzysłowów w Oracle?

  4. Preferowane długości kolumn Oracle

  5. Oracle UTL_SMTP:przykład wysyłania poczty z załącznikiem przy użyciu uwierzytelniania portfela Oracle