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

Jak volat proceduru, která používá stejnou tabulku v po aktivaci

Nemůžete.

Normální spouštěč na úrovni řádků se nemůže dotazovat na tabulku, ve které je spouštěč definován, protože by to vyvolalo výjimku mutující tabulky. Předpokládám, že to je důvod, proč jste svému spouštěči deklarovali použití autonomní transakce (autonomní transakce pro cokoli jiného než trvalé protokolování je téměř jistě chyba). Pokud to však uděláte, váš spouštěč neuvidí nepotvrzené změny provedené spouštěcí transakcí. To je problém, na který nyní narážíte.

Alternativou by bylo použití složeného spouštěče . Deklarovali byste kolekci test_table.type_%type , přidali byste hodnoty, které se mění do této kolekce, do části na úrovni řádku vašeho spouštěče a poté byste iterovali prvky v kolekci v části po příkazu vašeho spouštěče. Spouštěč na úrovni příkazu se může dotazovat na tabulku, ve které je spouštěč definován, takže můžete volat svou proceduru z části po příkazu složeného spouštěče.



  1. MySQL:Vyberte Concat řetězců a Délku výsledného Concat

  2. V existující tabulce napiš první písmeno každého slova na velké

  3. Zkontrolujte interval mezi datemi v PHP

  4. Jak porovnat dva sloupce a najít neshodné záznamy v MySQL