让我们说我有一个简单的SQL脚本:
UPDATE my_table
SET data = new_data
WHERE my_table.data IS NULL;
我想打印UPDATE命令中更新的ID。所以像这样的功能明智:
UPDATE my_table
SET data = new_data, RAISE NOTICE 'Updated %', my_table.id
WHERE my_table.data IS NULL;
这可能吗?我正在使用PostgreSQL。
答案 0 :(得分:2)
好的,我想出了类似的东西。
DO language plpgsql $$
DECLARE _id bigint;
BEGIN
FOR _id IN
WITH up AS (
UPDATE my_table
SET data = new_data
WHERE data IS NULL
RETURNING id)
SELECT id from up
LOOP
RAISE NOTICE 'Updated %', _id;
END LOOP;
END
$$;
这有点笨拙,但应该适合你。
首先,RAISE NOTICE
必须像解释here那样包装。我发现无法将多行(...RETURNING id
)存储到变量中,这在当前版本中可能是不可能的。这就是我选择跟随更新的原因,该更新本身会提供您需要的RAISE
。
答案 1 :(得分:1)
您可以返回使用UPDATE语句的RETURNING
子句来返回每个更新行的值。从文档的例子:
UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT
WHERE city = 'San Francisco' AND date = '2003-07-03'
RETURNING temp_lo, temp_hi, prcp;
这将返回更新的温度。
在您的情况下,您可以尝试:
UPDATE my_table
SET data = new_data
WHERE my_table.data IS NULL
RETURNING id;
答案 2 :(得分:0)
如果要返回更新的行ID,请尝试这样,
更新:
UPDATE my_table SET col2 = val2 WHERE col1 = val1 RETURNING ID;
对于插入:
INSERT INTO my_table(col2)values(val2)RETURNING ID;