[英]How to use variables in “EXECUTE format()” in plpgsql
我想更新表stats
中的列,將特定列作為參數,然后返回該列的更新值 [只有 1 行]:
CREATE FUNCTION grow(col varchar) RETURNS integer AS $$
DECLARE
tmp int;
BEGIN
tmp := (EXECUTE format(
'UPDATE stats SET %I = %I + 1
RETURNING %I',
col, col, col
)
);
RETURN tmp;
END;
總的來說,我什至不確定這是否是做我想做的最好的方式,任何建議將不勝感激!
CREATE OR REPLACE FUNCTION grow(_col text, OUT tmp integer)
LANGUAGE plpgsql AS
$func$
BEGIN
EXECUTE format(
'UPDATE stats
SET %1$I = %1$I + 1
RETURNING %1$I'
, _col)
INTO tmp;
END
$func$;
稱呼:
SELECT grow('counter');
使用OUT
參數來簡化整體。
手冊中解釋了format()
語法。
您可以只運行UPDATE
而不是函數調用:
UPDATE stats SET counter = counter + 1 RETURNING counter;
具有動態 SQL 的函數不僅僅是不必要的復雜性的場景並不多。
如果可能,請考慮使用不同的表格布局:行而不是列(如@Ruslan 所建議)。 允許任意數量的計數器:
CREATE TABLE stats (
tag text PRIMARY KEY
, counter int NOT NULL DEFAULT 0
);
稱呼:
UPDATE stats
SET counter = counter + 1
WHERE tag = 'counter1'
RETURNING counter;
或者考慮一個專用的SEQUENCE
來計數......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.