/ / oracleの新しいトリガーと新しいトリガーの使用の違いは何ですか? - sql、oracle、plsql、トリガー、oracle-sqldeveloper

使用することの違いは何ですか?oracleの新しいトリガーと新しいトリガー - sql、oracle、plsql、トリガー、oracle-sqldeveloper

例えば、

私はこのトリガーを持っている

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;
/

したがって、2番目の例では、私が見出しで説明したようにnewの使い方に気付きました。最初の例では、コロンを使わないでnewを使用しています。これら2つの違いは何ですか?

ありがとう!

回答:

回答№1は1

最初のトリガーは構文的に間違っています。ニコラスがすでにコメントしたように、 :new トリガーの本体内に必要です。

唯一の場所 new. 必要とされる WHEN トリガー定義の句。例えば:

CREATE OR REPLACE TRIGGER SAL_REDUCE
BEFORE UPDATE ON DRIVER --or insert--
FOR EACH ROW
WHEN (NEW.SAL > 100)
BEGIN
IF(:NEW.SAL < 1000) THEN
RAISE_APPLICATION_ERROR(-20001,"SALARY CANNOT BE REDUCED!!! PAY THEM MORE");
END IF;
END;
/

この愚かな人工の例では、トリガーはif SAL 100以上です。