使用oracle11g的sqldeveloper中的触发器编译错误

使用oracle11g的sqldeveloper中的触发器编译错误,oracle,triggers,oracle11g,oracle-sqldeveloper,Oracle,Triggers,Oracle11g,Oracle Sqldeveloper,我一直在研究触发器 [ 使用sqldeveloper和我连接了Oracle 11g数据库。我成功创建了customers表。但当我尝试将触发器创建为: CREATE OR REPLACE TRIGGER display_salary_changes BEFORE DELETE OR INSERT OR UPDATE ON customers FOR EACH ROW WHEN (NEW.ID > 0) DECLARE sal_diff number; BEGIN sal_di

我一直在研究触发器 [ 使用sqldeveloper和我连接了Oracle 11g数据库。我成功创建了customers表。但当我尝试将触发器创建为:

CREATE OR REPLACE TRIGGER display_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON customers
FOR EACH ROW
WHEN (NEW.ID > 0)
DECLARE
   sal_diff number;
BEGIN
   sal_diff := :NEW.salary  - :OLD.salary;
   dbms_output.put_line('Old salary: ' || :OLD.salary);
   dbms_output.put_line('New salary: ' || :NEW.salary);
   dbms_output.put_line('Salary difference: ' || sal_diff);
END; 
我发现以下错误:

Error starting at line : 1 in command -
CREATE OR REPLACE TRIGGER display_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON customers
FOR EACH ROW
WHEN (NEW.ID > 0)
  DECLARE
   sal_diff number
Error report -
SQL Command: trıgger DISPLAY_SALARY_CHANGES
Failed: Warning: yürütme uyarı ile tamamlandı

Error starting at line : 7 in command -
BEGIN
    sal_diff := :NEW.salary  - :OLD.salary;
    dbms_output.put_line('Old salary: ' || :OLD.salary);
    dbms_output.put_line('New salary: ' || :NEW.salary);
    dbms_output.put_line('Salary difference: ' || sal_diff);
END;
Error report -
ORA-06550: line 2, column 5:
PLS-00201: identifier 'SAL_DIFF' must be declared
ORA-06550: line 2, column 5:
PL/SQL: Statement ignored
ORA-06550: line 3, column 60:
PLS-00487: Invalid reference to variable 'SQLDEVBIND1Z_2'
ORA-06550: line 3, column 5:
PL/SQL: Statement ignored
ORA-06550: line 4, column 60:
PLS-00487: Invalid reference to variable 'SQLDEVBIND1Z_1'
ORA-06550: line 4, column 5:
PL/SQL: Statement ignored
ORA-06550: line 5, column 51:
PLS-00201: identifier 'SAL_DIFF' must be declared
ORA-06550: line 5, column 5:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
此创建触发器块有什么问题?

它似乎与此处描述的“保护文本”功能相同

您的错误堆栈似乎与您发布的代码不一致。在SQL Developer窗口中,除了
CREATE TRIGGER
语句之外,还有什么其他内容吗?当我创建触发器作为新触发器时,相同的触发器在我的pc上与Oracle Database 11g 11.2.0.4.0版一起工作,如下所示:它是自动编译的,不会给出任何提示错误。但是,当我在.sql文件中创建触发器时,当我尝试运行以下块时,会出现错误:。我无法理解。感谢您的帮助。您是否尝试删除分号并添加其中一个:END/I尝试过,但正如我刚刚了解到的,它与SQLDeveloper的版本相关,它与我自己的语言不兼容,并且以某种方式当我尝试创建触发器时,它会混淆。当我更改版本时,错误将被删除。