计算PostgreSQL中受批处理查询影响的行数

Yav*_*sta 4 postgresql dynamic-sql plpgsql

首先,是的,我已经阅读了DO声明的文档:) http://www.postgresql.org/docs/9.1/static/sql-do.html

所以我的问题:

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

在Oracle中,解决方案将包含4个步骤:

  1. 将InputOutput参数"N"添加到命令
  2. 添加BEGIN ... END; 命令
  3. add :N:=:每个语句后N + sql%rowcount.
  4. 完成!执行后我们可以从命令中读取N参数.

我怎么能用PostgreSQL做到这一点?我正在使用npgsql提供程序,但如果有帮助可以迁移到devard.

Erw*_*ter 8

DO语句块很适合执行动态SQL.回报价值并不好.使用plpgsql 函数.

您需要的关键声明是:

GET DIAGNOSTICS integer_var = ROW_COUNT;
Run Code Online (Sandbox Code Playgroud)

手册中的详细信息.

示例代码:

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;
Run Code Online (Sandbox Code Playgroud)

呼叫:

SELECT * FROM f_upd_some();
Run Code Online (Sandbox Code Playgroud)