Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 难以编译插入或更新后触发器_Oracle_Plsql_Triggers_Database Trigger - Fatal编程技术网

Oracle 难以编译插入或更新后触发器

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

我有一个带有“薪资”字段的员工表。我正在使用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 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;