在UPDATE触发器 - 在自己的执行期间触发?

时间:2015-07-27 15:47:20

标签: oracle plsql oracle11g oracle10g

我有以下触发器定义

PROMPT CREATE OR REPLACE TRIGGER C_BUSINESS_TABLE
CREATE OR REPLACE TRIGGER C_BUSINESS_TABLE
BEFORE INSERT OR UPDATE OF OC ON OUT_TAB FOR EACH ROW
DECLARE
    v_OC OUT_TAB.OC%type;
BEGIN
    SELECT OC into v_OC from ORDERS WHERE ORDER_ID=:NEW.ORDER_ID and ORDER_SEQ=:NEW.ORDER_SEQ and rownum=1;
    IF :NEW.OC != v_OC and v_OC is not NULL THEN
      :NEW.OC:=v_OC;
    END IF;
  EXCEPTION
    WHEN OTHERS THEN NULL;
END;
/

触发器旨在在以下场景中执行

  1. 插入OUT_TAB中的记录或
  2. 更新现场OC ON OUT_TAB
  3. 在Trigger Body中,字段OC本身已更新。该更新是否会再次(并递归地)调用触发器?

    我是否需要对其进行编码以避免递归?

1 个答案:

答案 0 :(得分:2)

没有它赢了,这没关系,当你设置以下值时:NEW.OC这实际上不是更新表,只有在触发代码完成后才会使用你的值更新/插入表设置:NEW.OC到