【问题标题】:Are there any advantages of using "When" clause in oracle trigger?在 oracle 触发器中使用“When”子句有什么好处吗?
【发布时间】:2015-03-11 03:23:38
【问题描述】:

我正在使用 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;

【问题讨论】:

    标签: triggers oracle11g


    【解决方案1】:

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

    【讨论】:

    • 谢谢贾斯汀。这有帮助。触发器写在一个每秒大约有一千个事务的表上。
    • @pradeepbn - 我不建议在每秒处理一千个事务的表上创建触发器。那效率太低了。我更感兴趣的是设计一个更合适、更高效的架构解决方案,而不是优化触发器的性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多