触发器警告:使用编译错误创建

时间:2014-05-22 21:00:11

标签: database oracle triggers

我有这个触发器,它说警告:触发器创建时出现编译错误。 你能给我快速的建议吗?

 /
CREATE OR REPLACE TRIGGER type_check
  BEFORE INSERT ON carrs
  FOR EACH ROW
BEGIN
  IF :new.weight > 3500 
  THEN
    :new.type := 'nakladne';
  ELSE
    :new.type := 'osobne';
  END IF;
END;
/

编辑:我仍然收到相同的警告

编辑:这是表格定义

create table carrs (
 id_Car Integer not null,
 id_board_unit Integer not null,
 id_evc_numbers Integer not null,
 id_owner Integer,
 weight Integer not null );

这里是错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/5      PLS-00049: bad bind variable 'NEW.TYPE'
6/5      PLS-00049: bad bind variable 'NEW.TYPE'

1 个答案:

答案 0 :(得分:0)

如果您正在使用SQL * Plus,请在收到警告后键入show errors以显示已报告的语法错误列表。当你知道它们是什么而不是猜测时,更容易诊断问题。

您对:new伪记录的引用至少需要包含冒号前缀:new而不是new。 PL / SQL中的赋值运算符也是:=而不是=。所以,至少,你需要像

这样的东西
CREATE OR REPLACE TRIGGER type_check
  BEFORE INSERT ON carrs
  FOR EACH ROW
BEGIN
  IF :new.weight > 3500 
  THEN
    :new.type := 'nakladne';
  ELSE
    :new.type := 'osobne';
  END IF;
END;

也可能存在其他错误。如果有,请键入show errors并修改您的问题以包含它们。

如果您希望在表中添加名为type的新列,则应在创建触发器之前执行此操作。但是,对于列来说,这不是一个特别好的名称,因为type也是Oracle中的保留字。我会选择更有意义的东西,例如carr_type。您必须指定新列在创建时需要保留的字符串大小。我猜你想要10个字符的空间

ALTER TABLE carrs
  ADD( carr_type VARCHAR2(10 CHAR) );

然后,您可能希望UPDATE您的表格填充现有数据的新列

UPDATE carrs
   SET carr_type = (case when weight > 3500
                         then 'nakladne'
                         else 'osobne'
                      end)
在创建触发器之前

CREATE OR REPLACE TRIGGER type_check
  BEFORE INSERT ON carrs
  FOR EACH ROW
BEGIN
  IF :new.weight > 3500 
  THEN
    :new.carr_type := 'nakladne';
  ELSE
    :new.carr_type := 'osobne';
  END IF;
END;