你想要的东西目前不可能用你描述的形式,但我认为你可以用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:请参阅相应的标签。 –