更新後にトリガーを持つテーブル(T1)があります。このトリガは、いくつかの値を探し、それは誰もがなぜ知っているん...他のテーブル(T2)トリガーを使用してテーブルを更新するとロックされます
CREATE OR REPLACE TRIGGER t1_AIR AFTER UPDATE ON t1 FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
v_dF1 DATE;
v_dF2 DATE;
v_nDays NUMBER;
v_cReg VARCHAR2(50);
BEGIN
IF :NEW.BN_BE_ESTADO not in ('PEN', 'ERR', 'BAJ') THEN
v_nDays := F_GET_PARAM(NULL, NULL, 'X_DAYS');
PCK_AUX.PR_GET_F1(:NEW.F_A, v_dF1, v_cReg);
PCK_AUX.PR_GET_F2(:NEW.F_A, v_dF2);
UPDATE T2
SET F_F1 = TRUNC(v_dF1),
F_F2 = TRUNC(v_dF2),
F_F_END = PCK_AUX.FU_GET_F_END(v_dF2+1, v_nDays),
F_N_REG = v_cReg
WHERE F_ID = :NEW.F_B;
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
しかし、私はそれが両方の表(t1とt2)でロックを発生さT1を更新を更新します?あなたがテーブルを更新すると、行シェア(RM)と行排他モード(RX)で行レベル(TX)ロックとテーブルロックが取得されているすべての
t1のトリガーがt2を更新します。あなたはt1のアップデートと同じ状況にあり、その後にt2の明示的なアップデートが続きます – Aleksej
しかし、t1は多くのアプリケーションによって更新されています。私はそれがトリガーでもっと簡単だと思いました... – igandea
どのようなタイプのロックが作成されますか? – ibre5041