2017-05-04 88 views
2
使用ROWTYPE變量行

比方說,我寫的,我從數據庫中取出一個行類型變量Postgres的PSQL腳本:更新Postgres裏

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; 

只有這不起作用,使用Google的一個小時後,我越來越行不通,我得到一個總體思路的Postgres沒有按」 t支持這一點,但有一個明確的答案「不」,也將是很好的。

回答

2

對不起,但那不行。

儘管可以在SELECT列表中使用整行引用,但UPDATE只允許在SET子句中使用列名或親子列列表。

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