gpt4 book ai didi

database - 查询在触发后没有结果数据的目的地

转载 作者:太空狗 更新时间:2023-10-30 01:46:40 26 4
gpt4 key购买 nike

我的触发器有问题。在插入新行时,它将检查商品是否未售出。我可以在软件中做到这一点,但我认为当数据库这样做时更好。

-- 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,offer_id) VALUES (824,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" )。

关于database - 查询在触发后没有结果数据的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com