在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]