Oracle 难以编译插入或更新后触发器
我有一个带有“薪资”字段的员工表。我正在使用Oracle SQL developer。我想写一个触发器,这样当有人更新EMPLOYEE表中的工资时,它会将EMPLOYEE_工资表中的工资字段更新为low、medium、high。这是第二张桌子Oracle 难以编译插入或更新后触发器,oracle,plsql,triggers,database-trigger,Oracle,Plsql,Triggers,Database Trigger,我有一个带有“薪资”字段的员工表。我正在使用Oracle SQL developer。我想写一个触发器,这样当有人更新EMPLOYEE表中的工资时,它会将EMPLOYEE_工资表中的工资字段更新为low、medium、high。这是第二张桌子 CREATE TABLE Employee_Salaries( Ssn CHAR(9) NOT NULL, Salary VARCHAR(10), Log_Date DATE ); 下面是将薪资字段更新为低、中或高的触发器和过程 CREATE OR RE
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
DECLARE
salaryRank VARCHAR(10) := ' ';
BEGIN
salaryType(:new.Salary, salaryRank);
INSERT INTO Employee_Salaries(Ssn, Salary, Log_Date) VALUES (:new.Ssn, salaryRank, SYSDATE);
END;
触发器中的关键字BEGIN
位于错误的位置。它应该位于定义块之后;也就是说,在声明salaryrank
之后和调用过程之前
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;