首先,是的,我已经阅读了 DO 语句的文档:)http://www.postgresql.org/docs/9.1/static/sql-do.html
所以我的问题是:
我需要执行一些包含 UPDATE 语句的动态代码块并计算所有受影响的行数。我在用着Ado.Net
提供者。
在 Oracle 中,解决方案有 4 个步骤:
- 将输入输出参数“N”添加到命令中
- add 开始...结束;命令
- add :N := :N + sql%行数在每个陈述之后。
- 完成!执行后我们可以从命令中读取N个参数。
我怎样才能用 PostgreSQL 做到这一点?我正在使用 npgsql 提供程序,但如果有帮助的话可以迁移到 devard。
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;
Call:
SELECT * FROM f_upd_some();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)