在Postgres中使用ROWTYPE变量更新行

时间:2017-05-04 19:42:05

标签: postgresql plpgsql

让我们说我正在写一个Postgres PSQL脚本,我从DB中获取一个rowtype变量:

DECLARE    
  m_bal  Balances%ROWTYPE;

BEGIN
  SELECT INTO m_bal *
  FROM Balances
  WHERE Balances.id = m_acct.id AND Balances.currency = _currency;
...

然后我想根据更复杂的逻辑更新一个或多个值并将其保存到数据库中:

UPDATE Balances
SET ROW = m_bal
WHERE id = m_bal.id;
只有这不起作用,经过一个小时的谷歌搜索后我才无处可去,我总体上认为Postgres并不支持这一点,但有一个明确的答案和&# #34;无"也很好。

2 个答案:

答案 0 :(得分:2)

抱歉,但这不起作用。

虽然您可以在SELECT列表中使用整行引用,但UPDATE仅允许SET子句中的列名或父级列表。

答案 1 :(得分:0)

虽然你可以单独更新每一列(通常是更新,如下所示),但不是整行:

create table test(
col1 text,
col2 int
);

insert into test
values
('asd4', 4),
('asd5', 5),
('asd6', 6) ;


do $$
declare
    m_bal  test%ROWTYPE;
begin
    SELECT INTO m_bal *
    FROM test
    WHERE test.col2 = 5;

    UPDATE test
    SET 
    col1 = m_bal.col1,
    col2 = m_bal.col2
    WHERE col2 = 6;
end;
$$ language plpgsql