2014-11-21 136 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