【问题标题】:trigger compiling error in sqldeveloper with oracle11g使用 oracle 11g 在 sql developer 中触发编译错误
【发布时间】:2015-05-13 23:15:41
【问题描述】:

我一直在研究触发器 [http://www.tutorialspoint.com/plsql/plsql_triggers.htm][1] 用 sqldeveloper 和我连接了 Oracle 11g 数据库。我成功创建了客户表。但是当我尝试将触发器创建为:

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:

这个创建触发器块有什么问题?

【问题讨论】:

  • 您的错误堆栈似乎与您发布的代码不符。除了CREATE TRIGGER 语句之外,您的 SQL Developer 窗口中还有其他内容吗?
  • 使用 Oracle Database 11g 版本 11.2.0.4.0 在我的电脑上工作的相同触发器
  • 当我将触发器创建为这样的新触发器时:imgur.com/axdMCmC 它会自动编译而不会出现任何错误。但是当我在 .sql 文件中创建触发器时,当我厌倦了像这样运行块时会出错:imgur.com/ubwTCig。我无法理解。感谢您的帮助。
  • 您是否尝试删除分号并添加以下之一:END /
  • 我做了,但我刚刚了解到它与 SQLDeveloper 的版本有关,它与我自己的语言不兼容,并且当我尝试创建触发器时它会以某种方式混淆。当我更改版本时,错误被删除。

标签: oracle triggers oracle11g oracle-sqldeveloper


【解决方案1】:

这似乎与此处描述的“保护文字”功能相同 http://krisrice.io/2015-09-11-sqlcl-more-secure-now-with-rest/

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2010-12-12
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    相关资源
    最近更新 更多