0

我正在编写一个INSTEAD OF UPDATE触发器,并且我想确定哪些列被赋予了触发触发器的 UPDATE 语句的 WHERE 子句。

例如,

假设我们有下表

table_name
--COL1
--COL2
--COL3
--COL4

我想要,当执行更新时,例如UPDATE table_name SET COL1=VAL1,COL2=VAL2 WHERE COL3=VAL3

能够在我的触发器中说

CREATE or replace TRIGGER DEVICES_VIEW_TR 
  INSTEAD OF UPDATE ON DEVICES_VW
  BEGIN
    IF (COL3 has been given in the where clause) THEN
      variable=getValueOf(COL3);
    ELSEIF (COL4 has been given in the where clause) THEN 
      variable=getValueOf(COL4);
    END IF;
  END;
/

这可以做到吗?

谢谢

4

3 回答 3

1

您可以UPDATING('column name')在触发器中使用:

-- in INSTEAD OF trigger body:
IF updating('COL1') THEN
  -- some operation
END IF;

检查此示例:使用 UPDATING的示例

于 2013-10-25T09:05:45.493 回答
0

您可以使用NEWOLD伪记录并运行值的比较

if :NEW.COL3 <> :OLD.COL3 THEN ...
于 2013-10-25T09:03:52.670 回答
0

触发器对调用它们的语句一无所知,因此您必须使用某种带外信号,例如更改您的应用程序以在数据库包中设置一些全局变量,或使用应用程序上下文。

于 2013-10-31T06:27:52.673 回答