使用数据库触发器将Postgres乘法功能添加到字段

时间:2018-08-10 09:27:08

标签: mysql database postgresql insert-update database-trigger

我有2个表(在同一POSTGRESQL数据库中)分别称为 Orders Products 。他们或多或少看起来像这样:

产品

-整数 id(主)

-文本描述

-数字单价

订单

-整数 id(主)

-整数 productid(product.id的外键)

-整数数量(订购数量)

-数字总价(订单号*产品单价)

我需要的是一个程序,一旦数据库触发,该程序将更新缺少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();

0 个答案:

没有答案