0
在例子中,使用的区别是什么:oracle中的new和new触发器有什么不同?
我有这样的触发
CREATE OR REPLACE TRIGGER SAL_REDUCE
BEFORE UPDATE ON DRIVER --or insert--
FOR EACH ROW
BEGIN
IF(NEW.SAL < 1000) THEN
RAISE_APPLICATION_ERROR(-20001,'SALARY CANNOT BE REDUCED!!! PAY THEM MORE');
END IF;
END;
/
,这触发
CREATE OR REPLACE TRIGGER Salary_check
BEFORE INSERT OR UPDATE OF Sal, Job ON Emp99
FOR EACH ROW
DECLARE
Minsal NUMBER;
Maxsal NUMBER;
Salary_out_of_range EXCEPTION;
BEGIN
/* Retrieve the minimum and maximum salary for the
employee's new job classification from the SALGRADE
table into MINSAL and MAXSAL: */
SELECT Minsal, Maxsal INTO Minsal, Maxsal FROM Salgrade
WHERE Job_classification = :new.Job;
IF (:new.Sal < Minsal OR :new.Sal > Maxsal) THEN
RAISE Salary_out_of_range;
END IF;
EXCEPTION
WHEN Salary_out_of_range THEN
Raise_application_error (-20300,
'Salary '||TO_CHAR(:new.Sal)||' out of range for '
||'job classification '||:new.Job
||' for employee '||:new.Ename);
WHEN NO_DATA_FOUND THEN
Raise_application_error(-20322,
'Invalid Job Classification '
||:new.Job_classification);
END;
/
因此,在第二个例子中,你注意到的用法:作为我的标题描述新,并在第一个例子中使用新的没有冒号。这两者有什么区别?
谢谢!
您使用'火:new'(带冒号)在触发器引用一个伪记录。引用'new'(不带冒号)会产生一个错误,除非你有一些名为'new'的其他对象(复合对象),比如包 - 坏主意。 –