PostgreSQL 9.3中的@@ ROWCOUNT

MAK*_*MAK 6 postgresql postgresql-9.3

我想返回受最后一个语句影响的行数.

使用Microsoft SQL Server 2008 R2我这样做:

SELECT * FROM Test_table;

SELECT @@ROWCOUNT AS [Number Of Rows Affected];
Run Code Online (Sandbox Code Playgroud)

威尔会给出:

Number Of Rows Affected
-----------------------
10
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL 9.3中怎么样?

小智 9

DO $$
DECLARE
     total_rows integer;
BEGIN
  UPDATE emp_salary
   SET salary = salary+1;
   IF NOT FOUND THEN
      RAISE NOTICE'Now rows found %';
   ELSIF FOUND THEN
   GET DIAGNOSTICS total_rows := ROW_COUNT;
      -- the above line used to get row_count
      RAISE NOTICE'Rows Found : total_rows: %', total_rows;
   END IF; 
END $$;
Run Code Online (Sandbox Code Playgroud)


Eel*_*lke 6

据我所知,postgresql 中没有这样的构造,但是行数是从 postgresql 获得的结果的一部分。

更正:正如 a_horse_with_no_name 在他的评论中指出的那样,有类似的东西可以在 PL/pgSQL 中使用。另请参阅 Achilles Ram Nakirekanti 发布的答案中的示例

然而,在程序内部,我最初的建议在大多数情况下比使用 PL/pgSQL 更容易。

使用 libpq 时:根据选择的结果,您可以使用 PQntuples 来确定返回的行数。对于更新、插入和删除,您可以使用 PQcmdTuples 和结果来获取受影响的行数。

其他客户端库通常具有类似的功能。

对于参考文章中的 REF:GET DIAGNOSTICS integer_var = ROW_COUNT;