0
我正在使用觸發器和函數將值插入到另一個表中。Postgresql錯誤當我使用觸發器時,子查詢返回多個行
我有此表 1)展
exhid exhname description strtdate enddate status
101 The Famous BLAH BLAH 2013-07-15 2013-10-13 SOON
102 York Exhibition BLAH BLAH 2013-08-07 2014-01-19 End
103 Fine ART BLAH BLAH 2014-09-26 2015-03-21 SOON
2)Works_Exhibitions
alphid numberid exhid
SCFI 1007 101
SCBU 1008 101
PAHF 1002 103
PAHE 1003 103
PASP 1004 103
和第三具有它Temp_works_exhibitions
alphid numberid exhid
相同的屬性Works_Exhibitions和名字空表
我確實創建了此功能並觸發所以一旦我更新展覽中任何展覽的狀態爲「結束」,我想將該展覽的所有作品複製到新表格Temp_works_exhibitions中,然後從Works_exhibition表中刪除它
CREATE OR REPLACE FUNCTION add2Temp_works_exhibitions() returns TRIGGER AS $updExhibStat$
BEGIN
IF(NEW.Status = 'End') THEN
INSERT INTO temp_works_exhibitions
select
Works_Exhibitions.alphID,
Works_Exhibitions.numberID,
Works_Exhibitions.exhID
from
Works_Exhibitions
where
Works_Exhibitions.exhID = (select Exhibitions.exhID from Exhibitions where Exhibitions.Status = 'End');
delete from Works_Exhibitions where Works_Exhibitions.exhID = (select Exhibitions.exhID from Exhibitions where Exhibitions.Status = 'End');
RETURN NEW;
END IF;
RETURN NULL;
END;
$updExhibStat$ LANGUAGE plpgsql;
--CREATE TRIGGER updExhibStat AFTER UPDATE ON Exhibitions FOR EACH ROW EXECUTE PROCEDURE add2Temp_works_exhibitions();
當我測試它第一次做工作,但是當我試圖更新一個新的展覽我得到這個錯誤
ERROR: more than one row returned by a subquery used as an expression
CONTEXT: SQL statement "INSERT INTO temp_works_exhibitions
select
Works_Exhibitions.alphID,
Works_Exhibitions.numberID,
Works_Exhibitions.exhID
from
Works_Exhibitions
where
Works_Exhibitions.exhID = (select Exhibitions.exhID from Exhibitions where Exhibitions.Status = 'End')"
PL/pgSQL function add2temp_works_exhibitions() line 5 at SQL statement
任何想法如何解決這個問題
瑣碎的方法是添加'LIMIT 1'但更大的問題是:您爲什麼認爲子查詢會返回一個答案?和/或如果沒有完全一個答案,你想要做什麼。 – 2014-10-11 23:05:20
簡而言之:使用'EXISTS(...)' – wildplasser 2014-10-11 23:20:15
我確實使用了EXISTS(...),但我得到的函數exisit(boolean)不存在 – Alex 2014-10-12 00:29:43