2016-10-09 47 views
0

代碼:SQL甲骨文錯誤 「PL/SQL:SQL語句忽略」 和 「PL/SQL:ORA-00917:缺少逗號」

create or replace TRIGGER populate_title 
AFTER INSERT 
ON SITES 


BEGIN 

INSERT INTO sites 
(job_title) 
VALUES 
((SELECT title FROM jobs WHERE job_id IN (SELECT job_id FROM SITES)); 

END; 

所以基本上,我們正試圖以填充字段表「網站」上的列「job_title」,但信​​息在另一個表中,「工作」。我們有錯誤,現在卡住了。請幫忙。

+0

什麼是INSERT語句看起來像你使用填充站點表?這就是你想要獲得並填充你的領域的地方,而不是觸發器。不要使用觸發器來實現業務邏輯 - 這種方式就是瘋狂。 –

+0

確定你需要'更新'而不是'插入' –

+0

你是如何懷疑錯誤是從'觸發器'如果原來的'插入'錯誤怎麼辦? –

回答

0

首先,如果你設法得到這個編譯,你可能會有一個變異表的問題。

觸發應該寫成before insert觸發:

create or replace TRIGGER populate_title 
BEFORE INSERT 
ON SITES 
BEGIN 
    SELECT j.title INTO :NEW.job_title 
    FROM jobs j 
    WHERE j.job_id = :NEW.job_id; 
END; 

但是,對於此觸發器是可笑。得到這個信息的正確方法是查詢和使用JOIN

select s.*, j.title 
from sites s join 
    jobs j 
    on s.job_id = j.job_id; 
+0

我們不是試圖檢索這些信息,而是從另一個表中插入,以避免人爲錯誤。 –

+0

也謝謝你! –

+0

@ScottLeslie。 。 。使用'JOIN's可以防止人爲錯誤。在多個表格中擁有相同的屬性是渺茫的,並允許不一致的數據 - 除非這是你的意圖。 –