你想要的東西目前不可能用你描述的形式,但我認爲你可以用UPDATE ... RETURNING
做你想做的。請參閱UPDATE ... RETURNING
in the manual。
UPDATE <target_table>
SET Proprerty0 = Value0
WHERE <predicate>
RETURNING Property0;
很難確定,因爲您提供的示例非常抽象以至於毫無意義。
你也可以使用一個wCTE,它允許更復雜的情況:
WITH updated_rows AS (
UPDATE <target_table>
SET Proprerty0 = Value0
WHERE <predicate>
RETURNING row_id, Property0
)
SELECT row_id, some_computed_value_from_property
FROM updated_rows;
見common table expressions (WITH
queries)和depesz's article on wCTEs。基於問題增加了一些細節
UPDATE,這裏是一個使用UPDATE ... RETURNING
演示:
CREATE TABLE upret_demo(
id serial primary key,
somecol text not null,
last_updated timestamptz
);
INSERT INTO upret_demo (somecol, last_updated) VALUES ('blah',current_timestamp);
UPDATE upret_demo
SET
somecol = 'newvalue',
last_updated = current_timestamp
WHERE last_updated = '2012-12-03 19:36:15.045159+08' -- Change to your timestamp
RETURNING
somecol || '_computed' AS a,
'totally_new_computed_column' AS b;
輸出運行的第一時間時:
a | b
-------------------+-----------------------------
newvalue_computed | totally_new_computed_column
(1 row)
當再次運行,它將不起作用並且不返回任何行。
如果您在結果集中執行了更復雜的計算,則可以使用wCTE,以便加入更新結果並執行其他複雜的操作。
WITH upd_row AS (
UPDATE upret_demo SET
somecol = 'newvalue',
last_updated = current_timestamp
WHERE last_updated = '2012-12-03 19:36:15.045159+08'
RETURNING id, somecol, last_updated
)
SELECT
'row_'||id||'_'||somecol||', updated '||last_updated AS calc1,
repeat('x',4) AS calc2
FROM upd_row;
換句話說:使用UPDATE ... RETURNING
,或者直接以產生計算出的行,或在一個可寫爲CTE更復雜的情況。
請務必在提問中提及您的PostgreSQL版本。 –
所以你**不要**想在PL/pgSQL中做,但在SQL中。否則,您*可能會使用GET GETNAGNOSTICS –
@CraigRinger:請參閱相應的標籤。 –