在oracle触发器中使用“When”子句有什么好处吗?

时间:2015-03-10 18:48:18

标签: triggers oracle11g

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

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;

1 个答案:

答案 0 :(得分:1)

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