Oracle 更新时触发器-在其自身执行期间触发?

Oracle 更新时触发器-在其自身执行期间触发?,oracle,plsql,oracle11g,oracle10g,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=:

我有下面的触发器定义

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;
/
触发器将在以下场景中执行

  • 在“输入输出”选项卡或
  • 更新OUT_选项卡上的字段OC
  • 在触发器主体内,字段OC本身被更新。该更新会再次(递归地)调用触发器吗


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

    不需要,这样就可以了,当您将值设置为:NEW.OC时,这实际上不是在更新表,只有在触发代码完成后,才使用您将:NEW.OC设置为的值更新/插入表