计算受PostgreSQL中批量查询的行数(Calculate number of rows aff

2019-06-23 16:12发布

对于DO语句首先,是我读过的文档:) http://www.postgresql.org/docs/9.1/static/sql-do.html

所以我的问题:

我需要执行一些代码动态块包含UPDATE语句,并计算所有受影响的行数。 我使用Ado.Net提供商。

在Oracle的解决方案将有4个步骤:

  1. 添加的inputOutput参数“N”到命令
  2. 添加BEGIN ... END; 命令
  3. 添加:N:=:N + SQL%的行数的每个语句之后。
  4. 完成! 我们可以读取命令N参数,后执行它。

我怎样才能在PostgreSQL做呢? 我使用的是供应商Npgsql的,但可以迁移到devard是否有帮助。

Answer 1:

DO语句块是好的执行动态SQL。 他们没有很好的返回值。 使用PLPGSQL 功能为。

你需要的关键语句是:

GET DIAGNOSTICS integer_var = ROW_COUNT;

详细的说明书中无。

示例代码:

CREATE OR REPLACE FUNCTION f_upd_some()
  RETURNS integer AS
$func$
DECLARE
   ct int;
   i  int;
BEGIN
   EXECUTE 'UPDATE tbl1 ...';       -- something dynamic here
   GET DIAGNOSTICS ct = ROW_COUNT;  -- initialize with 1st count

   UPDATE tbl2 ...;                 -- nothing dynamic here 
   GET DIAGNOSTICS i = ROW_COUNT;
   ct := ct + i;                    -- add up

   RETURN ct;
END
$func$  LANGUAGE plpgsql;

呼叫:

SELECT * FROM f_upd_some();


Answer 2:

我的解决方法很简单。 在Oracle我需要使用变量来计算更新的行的总和,因为command.ExecuteNonQuery()返回只受该批次中的最后一次更新的行数。

然而, npgsql返回所有UPDATE查询更新所有行的总和。 所以我只需要调用command.ExecuteNonQuery()和得到的结果没有任何变数。 远远高于与Oracle容易。



文章来源: Calculate number of rows affected by batch query in PostgreSQL