postgresql – 触发错误:尚未分配录制“新”
发布时间:2020-12-13 15:58:58 所属栏目:百科 来源:网络整理
导读:我在 postgresql中有以下代码: CREATE OR REPLACE FUNCTION update_category() RETURNS trigger AS $newProduct$BEGIN UPDATE category SET product_count = product_count + 1 WHERE cat_id = NEW.cat_id; INSERT INTO notification (content,type,p_id) V
我在
postgresql中有以下代码:
CREATE OR REPLACE FUNCTION update_category() RETURNS trigger AS $newProduct$ BEGIN UPDATE category SET product_count = product_count + 1 WHERE cat_id = NEW.cat_id; INSERT INTO notification (content,type,p_id) VALUES('new product',1,NEW.p_id); RETURN NEW; END; $newProduct$LANGUAGE plpgsql; CREATE TRIGGER update_cat AFTER INSERT ON product EXECUTE PROCEDURE update_category(); 将记录插入产品后,我收到错误: [2017-03-20 16:05:05] [55000] ERROR: record "new" is not assigned yet [2017-03-20 16:05:05] Detail: The tuple structure of a not-yet-assigned record is indeterminate. [2017-03-20 16:05:05] Where: SQL statement "UPDATE category SET product_count = product_count + 1 WHERE cat_id = NEW.cat_id" [2017-03-20 16:05:05] PL/pgSQL function update_category() line 3 at SQL statement 我四处寻找解决方案,但我只找到错误的原因 FOR EACH STATEMENT 正在被用来代替 FOR EACH ROW 看到我只是执行一次程序,解决方案不适用于我的情况. 谢谢你的帮助! 解决方法
解决方案确实要添加FOR EACH ROW:
CREATE TRIGGER update_cat AFTER INSERT ON product FOR EACH ROW EXECUTE PROCEDURE update_category(); 我假设FOR EACH ROW意味着为产品中的每一行调用一次过程,而不是为每行插入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |