首先,是的,我已经阅读了DO声明的文档:) http://www.postgresql.org/docs/9.1/static/sql-do.html
所以我的问题:
我需要执行一些包含UPDATE语句的动态代码块,并计算所有受影响行的数量。我正在使用Ado.Net
提供商。
在Oracle中,解决方案将包含4个步骤:
如何使用PostgreSQL做到这一点?我正在使用npgsql提供程序,但如果有帮助,可以迁移到devard。
答案 0 :(得分:7)
DO
语句块可以很好地执行动态SQL。回报价值并不好。请使用plpgsql function。
您需要的关键声明是:
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();
答案 1 :(得分:1)
我的解决方案非常简单。在Oracle中,我需要使用变量来计算更新行的总和,因为command.ExecuteNonQuery()
仅返回批处理中上一个UPDATE影响的行数。
但是,npgsql
返回所有UPDATE查询更新的所有行的总和。所以我只需要调用command.ExecuteNonQuery()
并获得没有任何变量的结果。比使用Oracle容易得多。