我有这个触发器,它说警告:触发器创建时出现编译错误。 你能给我快速的建议吗?
/
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'
答案 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;