【问题标题】:Update value of each row in stored procedure certain id更新存储过程中每一行的值某个id
【发布时间】:2015-12-06 08:32:28
【问题描述】:

我想创建一个存储过程,在插入、更新和删除操作后自动更新每个事务类的余额。我与四个属性有一个关系,id 和 transaction_class 之间的组合是主键。

Transcation:

Id  Transaction_Class  Credit   Debit    Balance
-------------------------------------------------
1        1               0      100      200
2        2               0      1000     500
3        1               0      100      200
4        3               0      1000     1000
5        2              500     0        500

如果我“插入”

【问题讨论】:

  • 似乎不完整......
  • 不应该是transaction_class = 1 的余额为-200(两个借方100)和transaction_class = 3 的-1000 吗?一般来说,存储可以根据现有值轻松计算的值并不是一个好主意。您可以使用单个 SQL 查询毫无问题地获得该结果。

标签: postgresql stored-procedures triggers


【解决方案1】:

这是一个使用函数的例子:

架构:

CREATE TABLE balances (    
    Id serial,
    Transaction_Class varchar(4),
    Credit float(2),
    Debit float(2),
    Balance float(2)
);

定义函数(该函数将余额设置为贷方和借方之间的差额):

CREATE OR REPLACE FUNCTION add_transaction(t varchar(4),c float(2), d float(2)) 
    RETURNS void AS $$
    BEGIN
      INSERT INTO balances 
      (Transaction_Class,Credit,Debit,Balance)
      VALUES (t,c,d,c-d);
    END;
    $$ LANGUAGE plpgsql;

使用函数插入新数据:

select add_transaction('T',30.5,15);

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 2010-12-15
    • 1970-01-01
    • 2017-07-17
    • 2023-04-01
    • 2016-07-11
    • 2015-07-19
    • 2018-02-05
    • 2017-03-28
    相关资源
    最近更新 更多