让我们说我正在写一个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;无"也很好。
答案 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