我的触发器有问题.在插入新行时,它将检查文章是否未售出.我可以在软件中做到这一点,但我认为这对DB来说更好.
-- Create function CREATE OR REPLACE FUNCTION checkSold() RETURNS TRIGGER AS $checkSold$ BEGIN SELECT offer_id FROM offer WHERE offer_id = NEW.offer_id AND date_sale IS NULL; IF NOT FOUND THEN RAISE EXCEPTION 'The Offer is Sold!'; END IF; RETURN NEW; END; $checkSold$LANGUAGE plpgsql; -- Create trigger Drop TRIGGER checkSold ON tag_map; CREATE TRIGGER checkSold BEFORE INSERT ON tag_map FOR EACH ROW EXECUTE PROCEDURE checkSold(); INSERT INTO tag_map (tag_id,offer_id) VALUES (824,80);
这是插入后的错误.
[WARNING ] INSERT INTO tag_map (tag_id,80) ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT,use PERFORM instead. CONTEXT: PL/pgsql function "checksold" line 2 at sql statement
触发器有什么问题?没有它效果很好.
解决方法
更换
SELECT offer_id FROM offer WHERE offer_id = NEW.offer_id AND date_sale IS NULL;
同
PERFORM offer_id FROM offer WHERE offer_id = NEW.offer_id AND date_sale IS NULL;
如建议.
手册中的更多信息(“38.5.2. Executing a Command With No Result”).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。