微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

database – 查询在触发后没有结果数据的目标

我的触发器有问题.在插入新行时,它将检查文章是否未售出.我可以在软件中做到这一点,但我认为这对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] 举报,一经查实,本站将立刻删除。

相关推荐