首先,是的,我已经阅读了DO声明的文档:)
http://www.postgresql.org/docs/9.1/static/sql-do.html
http://www.postgresql.org/docs/9.1/static/sql-do.html
所以我的问题:
我需要执行一些包含UPDATE语句的动态代码块,并计算所有受影响行的数量.我正在使用Ado.Net提供商.
在Oracle中,解决方案将包含4个步骤:
>将InputOutput参数“N”添加到命令
>添加BEGIN … END;命令
> add:N:=:每个语句后的N sql%rowcount.
>它完成了!执行后我们可以从命令中读取N参数.
解决方法
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();