Chinaunix首页 | 论坛 | 博客
  • 博客访问: 144144
  • 博文数量: 23
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 326
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-26 10:49
个人简介

记忆总是会慢慢褪去,所以让文字记住一切~

文章分类

全部博文(23)

文章存档

2017年(5)

2016年(3)

2015年(9)

2014年(6)

我的朋友

分类: Mysql/postgreSQL

2015-04-24 13:52:15

How to create a postgresql function


最近项目较紧张。开发的一个产品需要去更新数据库的一个字段,因为有多个模块(进程/线程)有可能同时去更新这一字段。我们只希望更新成功的那一位来发送Notification给用户。

我们希望通过查看update后返回的影响的记录数目(affected records) 来判断是否update成功。update执行后返回非0则代表此次更新是成功影响到数据库记录的。

不幸的是,
在系统的原有设计当中,我们封装unixODBC提供的API, 对于执行的SQL语句,并不会返回影响记录数目。后来反复思考,决定曲线救国:我们创建一个存储过程(procedure, 在postgresql中称之为function)来返回执行SQL后影响的记录条数。存储过程大意如下:

点击(此处)折叠或打开

  1. CREATE or REPLACE FUNCTION changeMode()
  2. RETURNS INTEGER
  3. LANGUAGE PLPGSQL
  4. AS $$
  5. DECLARE
  6.     update_count INTEGER;
  7. BEGIN
  8.     update_count = 0;
  9.     UPDATE tb_XXX SET value='0' WHERE section='YY' AND name='mode' AND value='1';
  10.     GET DIAGNOSTICS update_count = ROW_COUNT;
  11.     RETURN update_count;
  12. END;
  13. $$
利用了postgresql中的DIAGNOSTICS, ROW_COUNT,这些在官方文档里都可以查看到解释。

相信不同的Database都会提供类似的功能,大概模仿这样的一个做法就可以完美解决问题了~~~
阅读(4391) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~