不知道为什么接受的答案已被接受,因为它和附加的评论似乎都不能解决发布的代码中的明显问题。
在一个触发体中,我们引用:NEW
码字的插入行中的值。发布的代码在引用WHERE子句中的列时缺少冒号。这是需要什么:
CREATE OR REPLACE TRIGGER "propuesta_casas"
BEFORE INSERT ON "PROPUESTA_TIENDA_BARRIO"
FOR EACH ROW
WHEN (new."CASASCAL" IS NULL)
BEGIN
SELECT PROPUESTA.CASAS
INTO :new."CASASCAL"
FROM PROPUESTA
WHERE PROPUESTA.IDPROPUESTA=:new.IDPROPUESTA ;
END;
/
顺便说一句,注意创建对象时,在双引号中使用小写。
默认情况下,所有Oracle名称都以大写形式存储在数据字典中,但SQL语句不区分大小写。所以,下面的两个statments指向同一个对象:
select * from emp
/
select * from EMP
/
然而,如果我们创建对象在混合或小写名称,并把它放在双引号将其存储在数据字典与那确切的案例。这意味着我们必须在使用双引号引用对象时使用该确切情况。因此,如果我们创建了全部小写的表...
create table "emp" ...
...那么这个语句将失败:
select * from emp
/
它必须是
select * from "emp"
/
当然,如果我们已经有一个名为EMP的表,那么第一个语句将会成功,如果只是从不同的表中选择的话。
在触发器的情况下,我们通常不会按名称引用它们。但是,只要我们在数据字典中查找触发器,就必须使用这种情况:
select status
from user_triggers
where trigger_name = 'propuesta_casas'
/
来源
2010-08-07 06:36:05
APC
问题是什么?有错误消息你越来越... – 2010-08-07 02:43:27
@Leniel,当我运行SQL是好的,但是当我在表中插入一行,我得到一个错误:触发'MJVS.propuesta_casas'是无效的.. 。 – diegueus9 2010-08-07 02:48:11
当我编译我得到:被发现EOF当weit开始时case声明结束异常退出goto如果循环mod null编译提升返回选择更新 – diegueus9 2010-08-07 02:55:12