在postgresql中创建存储过程(function)

4520阅读 0评论2015-04-24 Niel_Rabbit
分类:Mysql/postgreSQL

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都会提供类似的功能,大概模仿这样的一个做法就可以完美解决问题了~~~
上一篇:函数没有返回值的后果
下一篇:小狼兔工作室