Можете да накарате спусъка на A да направи нещо, за да предупреди спусъка на B, че не е необходимо да се задейства. Има различни искания за настройка на някакво състояние за сесия. Най-простият възможен подход би бил да направите нещо като създаване на пакет с булева променлива bypass_checks_on_b
който сте задали на TRUE
преди да направите UPDATE
на A, задайте FALSE
след UPDATE
завършва и след това проверете състоянието на тази променлива във вашия тригер на B, преди да извършите вашите проверки. Бихте могли да направите нещо подобно с временна таблица или контекст, вместо да използвате пакет. По-малко ефективно бихте могли потенциално да анализирате стека на повикванията във вашия тригер на B, за да видите дали тригерът на A е в стека на повикванията, но това би било доста грозно.
Все пак бих бил много предпазлив относно цялата тази архитектура. Когато установите, че имате тригери на A, които предизвикват задействане на тригери на B, които искат да заявят A, почти винаги е така, че сте вложили твърде много логика в тригерите и че ще бъдете много по-добре обслужвани, ако се движите тази логика в слой със запомнени процедури, който може да бъде извикан, а не приложенията, извършващи директни вмъквания или актуализации. Когато вкарате твърде много логика в тригерите, в крайна сметка получавате система, която е много трудна за разбиране, защото не е очевидно от разглеждане на кода на приложението какви странични ефекти имат различните твърдения. И завършвате с код с много постоянно състояние, където имате много пътища през едно парче код в зависимост от повикващия. Това почти сигурно означава, че ще има състояния, които не тествате или не мислите къде ще откриете, че вашият код прави нещо неочаквано. Между наличието на много състояние и наличието на кодова база с много странични ефекти, много бързо можете да изградите кодова база, която по същество е неподдържана.