触发过滤器

时间:2017-05-16 07:25:27

标签: oracle plsql

在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;
/

1 个答案:

答案 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;