在postgresql中SET变量= table_column =表达式?

时间:2016-03-04 03:50:17

标签: postgresql variables sql-update

我在mssql存储过程中有这个查询:

 UPDATE @tmp_aging
    SET @balance=balance=(CASE WHEN @partner_code<>partner_code THEN 0 ELSE ISNULL(@balance,0) END)+ISNULL(debit,0)-ISNULL(credit,0),
        @partner_code=partner_code;

如您所见,变量@balance从balance列更新,该列从返回多行的表达式更新。

换句话说,我们为每一行同时更新变量@balance和列平衡,至少我认为它是如何工作的。跟踪“前进”的情况。会计平衡。

反正, 我将所有存储过程转换为postgresql函数,那么如何在postgresql中执行相同的操作呢?

1 个答案:

答案 0 :(得分:0)

  

我想要的东西:将SUM(余额)退还给v_balance

您可以将更新包装在CTE中:

with updated as (
  update the_table
     set ...
  where ...
  returning balance
)
select sum(balance)
  into v_balance
from updated;

但是,你原来的声明:

UPDATE @tmp_aging
    SET @balance=balance=(CASE WHEN ... END) .., 
        @partner_code=partner_code;

在SQL Server中进行聚合,所以我不确定这是否真的是你想要的。