PostgreSQL获取操作影响的行数

如何来获取普通的操作所影响的行数,PostgreSQL里面有一个内置的变量DIAGNOSTICS与ROW_COUNT可以做到这一点。

一、环境:

DB:9.4beta3

二、准备:

postgres=# create table test(id int);
CREATE TABLE
postgres=# insert into test select generate_series(1,20);
INSERT 0 20
postgres=# select * from test;
 id
----
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
(20 rows)

三、创建函数:

CREATE OR REPLACE FUNCTION fun_affect_rows()
  RETURNS text AS
$BODY$

declare
v_count int;begin

insert into test values(99),(98);
GET DIAGNOSTICS v_count = ROW_COUNT;
raise notice ‘本次插入数据量 %‘, v_count;

delete from test where id < 15;
GET DIAGNOSTICS v_count = ROW_COUNT;
raise notice ‘本次删除数据量 %‘, v_count;

update test set id = 100 where id >90;
GET DIAGNOSTICS v_count = ROW_COUNT;
raise notice ‘本次更新数据量 %‘, v_count;

return ‘测试完毕‘;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION fun_affect_rows()
  OWNER TO postgres;

四、运行情况:

postgres=# select * from fun_affect_rows();
NOTICE:  本次插入数据量 2
NOTICE:  本次删除数据量 14
NOTICE:  本次更新数据量 2
 fun_affect_rows
-----------------
 测试完毕
(1 row)

如果要返回DML的结果,那就用returning就可以了

五、参考

http://www.postgresql.org/docs/9.0/static/plpgsql-statements.html

时间: 2024-11-08 12:02:47

PostgreSQL获取操作影响的行数的相关文章

mysql 存储过程:提供查询语句并返回查询执行影响的行数

mysql 存储过程:提供查询语句并返回查询执行影响的行数DELIMITER $$ DROP PROCEDURE IF EXISTS `p_get_select_row_number`$$ CREATE PROCEDURE `test_cases`.`p_get_select_row_number`(IN p_select_sql VARCHAR(200), OUT p_count INT(8) ) BEGIN -- 声明 DECLARE cnt INT DEFAULT 0; DECLARE s

一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)

各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们说的例子是:获取当前终端的行数和列数 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在前面章回中介绍了termios相关的信息,以及termios提供的编程接口,通过这些接口可以操作终端,今天我们再介绍一些操作终端的编程接口,通过这些接口可以获取当前终端的行数和列数,这便是我们今天的主题. int setupterm(char *term, int fd, int *errret); 该函数用来修改当前

SQL Server返回插入数据的ID和受影响的行数

首先看看数据库里面的数据(S_Id为自增长标识列): sql server 中返回上一次插入数据的ID(标识值)有三种方式: 第一种 @@IDENTITY: 1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height) 2 values('013','卫庄','男','185'); 3 4 select @@IDENTITY -- 返回 17 @@IDENTITY可以返回当前连接所有范围内插入最后所生成的标识值(包括任何调用的存储过程和触发器).这个函

.net 更新access数据库 影响的行数为0

在更新Access数据库的时候,明明传入的数据及参数类型都正确,但是一直更新不了,查看影响的行数一直为0 此原因为 C#操作Access数据库的时候更新的参数和条件参数要按照更新语句中的顺序进行设置,如果设置不正确,则会出现以上问题 1 update TPersonnel 2 set pname=@pname, 3 shenfhm=@shenfhm, 4 sex=@sex, 5 phone=@phone, 6 weixing=@weixing, 7 pid=@pid, 8 email=@emai

【2017-06-29】在登录页面自动返回上次请求页面、Js获取table中的行数与列数

一.在登录页面自动返回上次请求页面 Request.UrlReferrer比如 if (Request.UrlReferrer != null) { //如果能获取来路地址 Response.Redirect(Request.UrlReferrer.ToString());} else { //没有来路地址 Response.Redirect("index.aspx"); 二.Js获取table中的行数与列数 var table =document.getElementById(&qu

EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbContext()) { ctx.Database.ExecuteSqlCommand("UPDATE Person SET Name = 'Michael' WHERE PersonID = 1"); } 二 : Database.SqlQuery<T>   EF5执行sql查询语句

SQLCommand.ExecutenonQuery受影响的行数为什么会是-1?

一般我们在执行SQL语句的时候会调用ExecuteNonQuery();然后用一个声明一个int值接受这个受影响的行数,通过判断这个int值,我们可以得知这条SQL语句是否已经执行.通常我们判断就是这个int值大于0,因为我们知道,最起码受影响的行数是1,我们判断大于0就OK了,但是在运行时我们发现我们判断的语句的值为false,为什么呢?最后查了一下MSDN文档,看完解释就明白了. 对于 UPDATE.INSERT 和 DELETE 语句,返回值为该命令所影响的行数.对于所有其他类型的语句,返

sql语句影响的行数

全局变量@@RowCount 和函数RowCount_Big()用于返回上一条语句影响的行数.如果行数大于 20 亿,则需要使用ROWCOUNT_BIG(). 1,ROWCOUNT_BIG(): Following a SELECT statement, this function returns the number of rows returned by the SELECT statement. Following an INSERT, UPDATE, or DELETE statemen

c#调用存储过程查询表并返回影响的行数

// 在此处放置用户代码以初始化页面 String DBConnStr; DataSet MyDataSet = new DataSet(); SqlDataAdapter DataAdapter = new SqlDataAdapter(); DBConnStr = "server=192.168.2.120,2433;database=DB_test;uid=sa;pwd=43g"; SqlConnection myConnection = new SqlConnection(DB