tableB.columnZ が参照される tableA レコードの数を表す場合、tableA の参照列が変更されない限り、tableA の UPDATE でトリガーしても意味がありません。
最初の機会: tableA.ReferenceColumn は変更されません:
CREATE OR REPLACE TRIGGER test_trig
AFTER INSERT ON tableA
FOR EACH ROW
BEGIN
UPDATE tableB
SET columnZ = columnZ + 1
WHERE tableB.columnX = :NEW.columnX;
END test_trig;
/
2 番目の機会: tableA.ReferenceColumn は変更されます:
CREATE OR REPLACE TRIGGER test_trig
AFTER INSERT OR UPDATE OF columnX ON tableA
FOR EACH ROW
BEGIN
IF UPDATING AND nvl(:OLD.columnX,0) <> 0 THEN
UPDATE tableB
SET columnZ = columnZ - 1
WHERE tableB.columnX = :OLD.columnX;
END IF:
IF nvl(:NEW.columnX,0) <> 0 THEN
UPDATE tableB
SET columnZ = columnZ + 1
WHERE tableB.columnX = :NEW.columnX;
END IF;
END test_trig;
/
3 番目の機会: tablaA レコードを削除できます。
CREATE OR REPLACE TRIGGER test_trig
AFTER INSERT OR DELETE OR UPDATE OF columnX ON tableA
FOR EACH ROW
BEGIN
IF (UPDATING OR DELETING) AND nvl(:OLD.columnX,0) <> 0 THEN
UPDATE tableB
SET columnZ = columnZ - 1
WHERE tableB.columnX = :OLD.columnX;
END IF:
IF nvl(:NEW.columnX,0) <> 0 THEN
UPDATE tableB
SET columnZ = columnZ + 1
WHERE tableB.columnX = :NEW.columnX;
END IF;
END test_trig;
/