获取PostgreSQL中受INSERT或UPDATE影响的记录数

Un *_*mme 48 sql postgresql sql-update

PostgreSQL的8/9我的数据库驱动程序不返回的执行时,受影响的记录计数INSERTUPDATE.

PostgreSQL提供非标准语法" RETURNING ",这似乎是一个很好的解决方法.但是语法可能是什么?该示例返回记录的ID,但我需要计数.

INSERT INTO经销商(做,DNAME)VALUES(DEFAULT 'XYZ小部件') RETURNING根本 ;

mer*_*ial 69

我知道这个问题是oooolllllld,我的解决方案可能过于复杂,但这是我最喜欢的解决方案!

无论如何,我必须做同样的事情,让它像这样工作:

-- Get count from INSERT
WITH rows AS (
    INSERT INTO distributors
        (did, dname)
    VALUES
        (DEFAULT, 'XYZ Widgets'),
        (DEFAULT, 'ABC Widgets')
    RETURNING 1
)
SELECT count(*) FROM rows;

-- Get count from UPDATE
WITH rows AS (
    UPDATE distributors
    SET dname = 'JKL Widgets'
    WHERE did <= 10
    RETURNING 1
)
SELECT count(*) FROM rows;
Run Code Online (Sandbox Code Playgroud)

有一天我真的不得不四处写一个爱的十四行诗给PostgreSQL的WITH子句......

  • 但如果您更新了 0 行,`SELECT count(*) FROM rows;` 将不会返回 0。它将不返回任何记录。这是一个问题。 (2认同)
  • @mercurial,如果你读完那首爱情十四行诗,我很想读一下。 (2认同)

Sco*_*ley 23

我同意Milen,你的司机应该为你做这件事.您使用什么驱动程序以及使用何种语言?但是如果您使用的是plpgsql,则可以使用GET DIAGNOSTICS my_var = ROW_COUNT;

http://www.postgresql.org/docs/current/static/plpgsql-statements.html


Igo*_*ova 5

您可以ROW_COUNT在更新后插入或使用以下代码:

insert into distributors (did, dname) values (DEFAULT, 'XYZ Widgets');
get diagnostics v_cnt = row_count;
Run Code Online (Sandbox Code Playgroud)

  • 似乎只能在代码块中工作 (2认同)