如何在触发器的 When 条件中使用 REGEXP_LIKE?

Posted

技术标签:

【中文标题】如何在触发器的 When 条件中使用 REGEXP_LIKE?【英文标题】:How to use REGEXP_LIKE in trigger's When condition? 【发布时间】:2016-01-11 11:43:01 【问题描述】:
create or replace trigger emp_trig  
before  insert or update of salary on emp  
for each row  
when `REGEXP_LIKE(:new.job_id, 'ac*','i')` -- Here

    BEGIN
        IF inserting then
            :new.commission_pct := 0.20;
        elsif  (:old.commission_pct is null) then
            :new.commission_pct := 0.1;
        END IF;
    END;

【问题讨论】:

请在提问时使用代码格式——它可以让人们更清楚地快速查看和理解您的代码和问题。 【参考方案1】:
create or replace trigger emp_trig
before  insert or update of salary on emp
for each row
when (REGEXP_LIKE(new.job_id, 'ac*','i'))
BEGIN
IF inserting then
    :new.commission_pct := 0.20;
elsif  (:old.commission_pct is null) then
    :new.commission_pct := 0.1;
END IF;
END;
/

【讨论】:

【参考方案2】:

嘿。如果您尝试进行简单匹配,请避免使用 Regular 表达。而是使用 LIKE 和您的测试条件。以下 sn-p 说明了一个简单的示例来满足您的要求。希望 它有帮助

CREATE OR REPLACE TRIGGER emp_trig before
  INSERT OR
  UPDATE OF sal ON emp FOR EACH row 
  WHEN (new.job LIKE '%TEST%')
  DECLARE
    BEGIN 
    IF inserting THEN 
    :new.comm := 0.20;
    elsif (:old.comm                      IS NULL) THEN
    :new.comm                           := 0.1;
    END IF;
    END;

【讨论】:

以上是关于如何在触发器的 When 条件中使用 REGEXP_LIKE?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark.sql.functions.when() 中使用多个条件?

触发器中存在条件

如何使用 REGEXP_REPLACE 替换特定条件下的重复单词?

drools when写条件判断时能加循环吗?我有多个条件要进行判断,而且条件的数量未知。

如何在pyspark数据框中添加多个带有when条件的新列?

如何在Spark中使用AND或OR条件