You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle触发器中NOT IN匹配部分字符串失效,求正确用法

Oracle触发器中处理前缀字符串排除的正确写法

你原来的触发器逻辑失效,核心原因是IN操作符仅支持精确值匹配,'AAA%'里的%会被当作普通字符而非通配符。比如当PRINCIPAL为AAA123时,'AAA123' NOT IN ('AAA%', 'BBB%')的结果是true,所以触发器仍会执行插入操作。

要实现“排除以AAA或BBB开头的PRINCIPAL”,可以用以下两种方式:

方式一:使用NOT LIKE组合判断

LIKE是Oracle中用于模糊匹配的操作符,%在这里才会被识别为通配符。需要分别对每个前缀进行排除:

CREATE OR REPLACE TRIGGER ACT_SESSION_AUDIT_TRIGGER
  AFTER INSERT OR UPDATE
  ON ACT_SESSION
  FOR EACH ROW
BEGIN
  -- 修正后的条件判断
  IF (:NEW.PROTOCOL IN ('HTTP', 'SFTP')) 
     AND (:NEW.PRINCIPAL NOT LIKE 'AAA%' AND :NEW.PRINCIPAL NOT LIKE 'BBB%') THEN
    INSERT INTO ACT_SESSION_AUDIT (PRINCIPAL,
                                   CON_START_TIME,
                                   DIS_END_TIME,
                                   ADAPTER_NAME,
                                   ADAPTER_TYPE,
                                   PROTOCOL)
    VALUES(:NEW.PRINCIPAL,
           :NEW.CON_START_TIME,
           :NEW.DIS_END_TIME,
           :NEW.ADAPTER_NAME,
           :NEW.ADAPTER_TYPE,
           :NEW.PROTOCOL);
  END IF;
END;

方式二:使用正则表达式REGEXP_LIKE

如果需要匹配的前缀较多,用正则表达式会更简洁:

CREATE OR REPLACE TRIGGER ACT_SESSION_AUDIT_TRIGGER
  AFTER INSERT OR UPDATE
  ON ACT_SESSION
  FOR EACH ROW
BEGIN
  -- 正则表达式匹配以AAA或BBB开头的字符串,取反后作为判断条件
  IF (:NEW.PROTOCOL IN ('HTTP', 'SFTP')) 
     AND NOT REGEXP_LIKE(:NEW.PRINCIPAL, '^(AAA|BBB)') THEN
    INSERT INTO ACT_SESSION_AUDIT (PRINCIPAL,
                                   CON_START_TIME,
                                   DIS_END_TIME,
                                   ADAPTER_NAME,
                                   ADAPTER_TYPE,
                                   PROTOCOL)
    VALUES(:NEW.PRINCIPAL,
           :NEW.CON_START_TIME,
           :NEW.DIS_END_TIME,
           :NEW.ADAPTER_NAME,
           :NEW.ADAPTER_TYPE,
           :NEW.PROTOCOL);
  END IF;
END;

内容的提问来源于stack exchange,提问作者user3478415

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27