小洪維尼 发表于 2016-12-21 10:27:22

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

How to create a postgresql function

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

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

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




[*]CREATE or REPLACE FUNCTION changeMode()

[*]RETURNS INTEGER
[*]LANGUAGE PLPGSQL
[*]AS $$
[*]DECLARE
[*]    update_count INTEGER;
[*]BEGIN
[*]    update_count = 0;
[*]    UPDATE tb_XXX SET value='0' WHERE section='YY' AND name='mode' AND value='1';
[*]    GET DIAGNOSTICS update_count = ROW_COUNT;
[*]    RETURN update_count;
[*]END;
[*]$$
利用了postgresql中的DIAGNOSTICS, ROW_COUNT,这些在官方文档里都可以查看到解释。

相信不同的Database都会提供类似的功能,大概模仿这样的一个做法就可以完美解决问题了~~~
页: [1]
查看完整版本: 在postgresql中创建存储过程(function)