在预言机触发器中使用"When"子句有什么好处吗?



我正在使用Oracle 11g,想知道使用"When"子句是否有任何特定的优势。以下是可以编写触发器的几种方法(两者都有效)。我想知道在性能方面是否有任何差异。

Create or Replace Trigger Validate_EMP_T1 on EMP
    After Insert     OR Update 
    On EMP For Each Row
    BEGIN
        IF  UPDATING THEN
            IF  :NEW.salary         !=  :OLD.salary
            OR  :NEW.dept_no        !=  :OLD.dept_no THEN
                .
            END IF;
        ELSIF    INSERTING THEN
            IF  :NEW.salary     !=  0 THEN
                .
            END IF;
        END IF;
    END;
    OR
    Create or Replace Trigger Validate_EMP_T1 on EMP
    After Insert     OR Update 
    On EMP For Each Row
    WHEN ( UPDATING  AND (  NEW.salary  != OLD.salary 
                         OR NEW.dept_no != OLD.dept_no )
        OR INSERTING AND    NEW.salary  != 0             )
    BEGIN
        IF  UPDATING THEN
            .
        ELSIF    INSERTING THEN
            .
        END IF;
    END;

如果存在差异,则带有 WHEN 子句的触发器应该稍微高效一些,因为如果不满足 WHEN 子句,它不需要调用触发器。 这种差异是否大到足以对你有意义,这是你必须进行基准测试的事情。 如果您正在构建一个尝试支持每秒数百万个事务的应用程序,并且其中绝大多数事务不满足 WHEN 子句,则差异可能是有意义的(尽管在这种情况下,您几乎肯定希望首先避免使用触发器)。 如果您正在构建几十人使用的业务线应用程序,则差异可能无法衡量。

最新更新