2015-05-05 17 views
0

我有一个表让我们说tableA已经填充var_code和start_time和end_time,我想插入一个值到另一个表,但在我插入之前我想检查这个var_code是否已经在表A中定义的特定时间内使用。要找到新对象和时间之间的关系,我必须加入三个表格。当我尝试插入某些内容时,出现错误消息:错误:查询没有结果数据的目标地址 我该怎么做?sql检查对象是否在使用触发器

CREATE OR REPLACE FUNCTION same_obj_does_not_already_used() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
declare 

    var1 numeric; 
    var2 date; 
    var3 time without time zone; 
    var4 time without time zone; 
    begin 
select id as var1,date as var2,start_t as var3,end_t as var4 
from tableA tA inner join tableB tB 
     on (tA.id = tB.id) 
     inner join tableC tC 
     on (tB.code = tC.fcode); 

if(new.id = var1 and new.date = var2 and new.start_t>=var3 and new.end_t<= var4) then 
    raise exception 'Error'; 
end if; 

end; 
RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
ALTER FUNCTION ame_obj_does_not_already_used() 
OWNER TO postgres; 

回答

0

我认为这部分

select id as var1,date as var2,start_t as var3,end_t as var4 
from tableA tA inner join tableB tB 
     on (tA.id = tB.id) 
     inner join tableC tC 
     on (tB.code = tC.fcode); 

应该有INTO子句..

select id, date, start_t, end_t INTO var1, var2, var3, var4 
+0

错误信息是固定的,但new.start_t和new.end_t是空的这是真的,因为当我插入新的var_code我不插入时间,所以我可以检查与插入另一个表中的时间 –