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