SQL:从UPDATE命令打印

时间:2016-05-26 09:15:39

标签: postgresql

让我们说我有一个简单的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。

3 个答案:

答案 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;