为什么此触发器没有在postgres的表中插入记录?

Why this trigger is not inserting records in my table in postgres?

提问人:Parth Mangukiya 提问时间:9/26/2018 更新时间:9/26/2018 访问量:558

问:

这是我的 3 张桌子。

Booking(Bookingid,date_of_booking,groupid,packageid,price)
Passenger(passengerid,groupid)
package(packageid,type)

这是一个函数,将在执行触发器时调用。

CREATE OR REPLACE FUNCTION COUNTPRICEFORTICKET3()
RETURNS TRIGGER AS 
$$
DECLARE
MYID INTEGER;
MYPRICE DOUBLE PRECISION;
BEGIN
SELECT COUNT(*) AS CNT INTO MYID FROM PASSENGER WHERE GROUPID=NEW.GROUPID 
GROUP BY GROUPID;
SELECT PRICE INTO MYPRICE FROM PACKAGE WHERE PACKAGEID=NEW.PACKAGEID;
NEW.PRICE:=MYPRICE * MYID;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;


CREATE TRIGGER COUNTPRICE3 BEFORE INSERT ON BOOKING
FOR EACH ROW EXECUTE PROCEDURE COUNTPRICEFORTICKET3();

问题是触发器已成功执行,但是当我尝试使用这样的INSERT查询将记录插入预订表时,它不会插入记录。

INSERT INTO BOOKING VALUES(NEXTVAL('BOOKSQ'),'26-SEP-2018',1201,700,NULL);
PostgreSQL 选择 触发器

评论

11赞 klin 9/26/2018
RETURN NULL放弃插入。该函数应返回 .NEW
0赞 Abdel P. 9/26/2018
是的,我不知道你为什么要存储你的值并且从不使用它
0赞 Parth Mangukiya 9/26/2018
我正在使用这 2 个值来计算 Booking 表的价格
0赞 Abdel P. 9/26/2018
哦。。是的。。知道我看到了 New.price 同化
1赞 Parth Mangukiya 9/26/2018
谢谢,它解决了。

答: 暂无答案