我正在使用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
子句,则差异可能是有意义的(尽管在这种情况下,您几乎肯定希望首先避免使用触发器)。 如果您正在构建几十人使用的业务线应用程序,则差异可能无法衡量。