难以编译 AFTER INSERT OR UPDATE 触发器

Difficulty compiling an AFTER INSERT OR UPDATE trigger

我有一个 EMPLOYEE table 有 SALARY 字段。我正在使用 Oracle SQL 开发人员。我想编写一个触发器,以便当有人更新 EMPLOYEE table 中的薪水时,它会将 EMPLOYEE_SALARIES table 中的薪水字段更新为低、中、高。这是第二个 table.

CREATE TABLE Employee_Salaries(
Ssn CHAR(9) NOT NULL,
Salary VARCHAR(10),
Log_Date DATE
);

这是将“薪水”字段更新为低、中或高的触发器和过程。

CREATE OR REPLACE PROCEDURE salaryType(x IN NUMBER, y OUT VARCHAR) IS
BEGIN
    IF x >= 60000 THEN y := 'HIGH';
    ELSIF (x >= 40000 AND x <= 60000) THEN y := 'MEDIUM';
    ELSE y := 'LOW'; 
    END IF;
END salaryType;
/

我在这个触发器上遇到编译器错误。请告诉我我做错了什么或者我遗漏了什么。

CREATE OR REPLACE TRIGGER salary1
    AFTER INSERT OR UPDATE ON Employee
    FOR EACH ROW
BEGIN
    DECLARE
        salaryRank VARCHAR(10) := ' ';
    salaryType(:new.Salary, salaryRank); 
    INSERT INTO Employee_Salaries(Ssn, Salary, Log_Date) VALUES (:new.Ssn, salaryRank, SYSDATE);
END;
/

Declaration Part放错了地方(应该在TRIGGER头的BEGIN之前,FOR EACH ROW之后),改成下面这样:

CREATE OR REPLACE TRIGGER salary1
    AFTER INSERT OR UPDATE ON Employee
    FOR EACH ROW
DECLARE
        salaryRank VARCHAR(10) := ' ';      
BEGIN
    salaryType(:new.Salary, salaryRank);
    INSERT INTO Employee_Salaries(Ssn, Salary, Log_Date) VALUES (:new.Ssn, salaryRank, SYSDATE);
END;

触发器中的关键字 BEGIN 位置错误。它应该在 DEFINE 块之后;也就是说,在声明 salaryrank 之后和调用过程之前。