postgres乘法函数添加到带有数据库触发器的字段

crcmnpdw  于 2021-06-23  发布在  Mysql
关注(0)|答案(0)|浏览(133)

我有两个表(在同一个postgresql数据库中),分别称为orders和products。它们或多或少是这样的:
产品:
-整数id(主)
-文本描述
-数字单价
订单:
-整数id(主)
-整数productid(product.id的外键)
-整数数量(订购金额)
-数字总价(orders.number*products.unitprice)
我需要的是一个过程,在数据库触发时将更新缺少totalprice字段的字段。
到目前为止,我的程序是这样的:

CREATE PROCEDURE update_totalprice()
    BEGIN
         UPDATE Orders 
         SET Orders.totalprice=Orders.quantity*Products.unitprice 
         FROM Orders, Products
         WHERE Orders.productid = Products.id AND Orders.totalprice = NULL 
    END;

然后,我尝试创建一个数据库触发器,以便在表更改时调用该过程。

CREATE TRIGGER check_Orders
        BEFORE UPDATE ON Orders
        FOR EACH ROW
        EXECUTE PROCEDURE update_totalprice();

这就是我被卡住的地方,我不知道我做错了什么。。。
编辑:
找到了解决办法,最后都是语法错误。
函数本身如下所示:

CREATE OR REPLACE FUNCTION orders_totalprice() RETURNS TRIGGER AS $orders_totalprice$
            BEGIN
                UPDATE orders SET totalprice = NEW.numberofproducts * products.unitprice FROM products
                WHERE NEW.productid = products.id;
                IF NOT FOUND THEN RETURN NULL; END IF;
        RETURN NEW;
    END;
    $orders_totalprice$ LANGUAGE plpgsql;

当触发器查询如下所示时:

CREATE TRIGGER trigger_orderstotalprice
    AFTER INSERT ON orders
        FOR EACH ROW EXECUTE PROCEDURE orders_totalprice();

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题