2014-11-21 74 views
0

我正在爲insert創建一個觸發器,如果​​其中一個值與舊錶中的值相同。然後我打印一條消息。這是我的代碼。列插入觸發錯誤

Create or replace trigger TR_insert_act 
After INSERT On ACTIVITIES 
For each row 

DECLARE 
l_act varchar(30); 

Begin 

select Activity into l_act 
From ACTIVITIES; 

if(:new.Activity in l_act) then 
DBMS_OUTPUT.PUT_LINE ('There is duplicate.'); 
end if; 

end; 

它沒有編譯與l_act選擇錯誤,請問該怎麼做?

+0

你想創建一個唯一的約束嗎? – 2014-11-21 20:34:02

+0

謝謝回覆。我不需要約束,但只需要打印一條消息,如果我發現插入的值已經存在於表中。 – 2014-11-21 20:36:36

+0

你沒有一個地方的條件。 – 2014-11-21 20:37:52

回答

0

您需要一個BEFORE觸發器和一個WHERE條件。

雖然DBMS_OUTPUT不會顯示錯誤。

Create or replace trigger TR_insert_act 
before INSERT On ACTIVITIES 
For each row 

l_act number; 
Begin 

select count(1) into l_act 
From ACTIVITIES 
WHERE ACTIVITY = :new.Activity 

if(l_act > 0) then 
    RAISE_APPLICATION_ERROR (
    num => -20000, 
    msg => 'There is Duplicate'); 
end if; 

end; 
+0

謝謝,我解決了。但DBMS_OUTPUT在我的情況下工作,我正在使用Oracle。 – 2014-11-24 14:15:26