难以编译 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
之后和调用过程之前。
我有一个 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
之后和调用过程之前。