【问题标题】:PLS-00049: bad bind variable in UPDATE TriggerPLS-00049:更新触发器中的绑定变量错误
【发布时间】:2012-09-24 23:38:25
【问题描述】:

我正在尝试在 Oracle 11g Express Edition 中编写一个简单的触发器:

CREATE OR REPLACE TRIGGER EMPLOYEE_UPDATE 
BEFORE UPDATE ON EMPLOYEE
FOR EACH ROW
BEGIN
   :new.End_Date := SYSDATE;
END;

但它会引发错误:

Error(4,1): PLS-00049: bad bind variable 'NEW.END_DATE'

这个简单的触发器有什么问题?

【问题讨论】:

  • EMPLOYEE 表中是否有“End_Date”列?
  • 是的,它是 Employee 表中的列。

标签: oracle triggers


【解决方案1】:

不知何故重写 CREATE TABLE EMPLOYEE 语句后问题消失了。我有

CREATE TABLE EMPLOYEE
( "Employee_ID" NUMBER(6,0),
 "HireDate" DATE,
 "Salary" NUMBER(8,2),
 CONSTRAINT "EMPLOYEE_PK" PRIMARY KEY ("Employee_ID") ENABLE
 );

我删除了表并重写了没有双引号的 CREATE TABLE 语法:

CREATE TABLE EMPLOYEE
( Employee_ID NUMBER(6,0),
 HireDate DATE,
 Salary NUMBER(8,2),
 CONSTRAINT EMPLOYEE_PK PRIMARY KEY (Employee_ID) ENABLE
 );

问题消失了。

编辑: 正如@Sathya 解释的那样,在Oracle 中,一个对象名称在创建时用引号括住它的名称变得区分大小写。我的误解是问题。

【讨论】:

  • 带引号,您也可以用相同大小写的引号输入查询。例如。 :new."END_Date"= ''。对了,表中没有 END_DATE 列?
  • 它不是不知何故,在 Oracle 中,一个对象名称,当创建时用引号括住它的名称变得区分大小写
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2019-06-05
  • 2017-08-16
  • 2015-08-09
  • 1970-01-01
  • 2020-10-22
相关资源
最近更新 更多