在Oracle 12c上我需要创建一个带过滤器的触发器。我的过滤器是:
OnWindowFocusedChanged
其中WHEN PERIOD <> FN_PERIODNEXT
是一个函数。
以下是触发器的代码。
FN_PERIODNEXT
无法编译,但是:
CREATE OR REPLACE TRIGGER AFTERIUDLIQUIDATIONSDETAILS
BEFORE INSERT OR DELETE
ON LIQUIDATIONSDETAILS
FOR EACH ROW
WHEN (NEW.PERIODID <> FN_PERIODNEXT)
BEGIN
IF INSERTING
THEN
UPDATE APPOINTSOFCAS
SET INLD = INLD + 1
WHERE CUSTOMERID = :NEW.CUSTOMERID
AND ID = :NEW.APPOINTOFCAID
AND KINDCONTROLID = :NEW.KINDCONTROLID;
END IF;
IF DELETING
THEN
UPDATE APPOINTSOFCAS
SET INLD = INLD - 1
WHERE CUSTOMERID = :OLD.CUSTOMERID
AND ID = :OLD.APPOINTOFCAID
AND KINDCONTROLID = :OLD.KINDCONTROLID;
END IF;
END;
/
答案 0 :(得分:3)
function insert_user() { print_r($_POST); exit(); }
子句是WHEN
表达式,在执行触发器主体之前由Oracle计算。您需要更改此行,因为它存在语法问题,因此无法编译。
Boolean
现在考虑到您的FN_PERIODNEXT是WHEN (NEW.PERIOD <> OLD.FN_PERIODNEXT)
这一事实,上述语句将为Function
。上述statememt评估仅适用于表列。
在您的场景中,您需要在触发器的主体内处理此条件:
not work
所以你的触发器就像:
If FN_PERIODNEXT <> :NEW.PERIOD then
. .
..
..
End if;