不知道爲什麼接受的答案已被接受,因爲它和附加的評論似乎都不能解決發佈的代碼中的明顯問題。
在一個觸發體中,我們引用: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