postgresql – 当布尔字段设置为true时,postgres更新日期字段
发布时间:2020-12-13 15:49:27 所属栏目:百科 来源:网络整理
导读:为了示例,请考虑一个表 create table foo ( contents text NOT NULL,is_active boolean NOT NULL DEFAULT false,dt_active date) 我插入一条记录: insert into foo (contents) values ('bar') 到现在为止还挺好.后来,我现在要“激活”记录: update foo set
为了示例,请考虑一个表
create table foo ( contents text NOT NULL,is_active boolean NOT NULL DEFAULT false,dt_active date ) 我插入一条记录: insert into foo (contents) values ('bar') 到现在为止还挺好.后来,我现在要“激活”记录: update foo set is_active = true 当is_active从false更改为true时,我想要做的是将dt_active设置为now().对于奖励积分,如果将??is_active从true更改为false,将dt_active设置为null,那将是很好的,但我可以不用它. 我真的想将这个内务处理推送到数据库中,它会使客户端代码更加清晰(因为许多表(甚至表中的列元组)都可以从这种技术中受益). 我很困惑如何在触发器中拉出数据库中的当前记录(我正在使用plpgsql),以便将“then”与“now”进行比较.代码示例或代码段的指针非常感谢. 解决方法CREATE OR REPLACE FUNCTION trg_update_foo() RETURNS TRIGGER AS $BODY$ BEGIN IF OLD.is_active = false AND NEW.is_active = true THEN NEW.dt_active := now(); ELSIF OLD.is_active = true AND NEW.is_active = false THEN NEW.dt_active := NULL; END IF; RETURN NEW; END; $BODY$ LANGUAGE 'plpgsql'; CREATE TRIGGER trg_update_foo BEFORE UPDATE ON foo FOR EACH ROW EXECUTE PROCEDURE trg_update_foo(); 应该管用.有关更多信息,请查看pl / PgSQL Triggers manual,以及额外的积分 – 整个plPgSQL文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- oracle create table xx as select ....CREATE TABLE XXX A
- FastJson 转换对象时,属性丢失
- 可可 – 如何在OS X应用程序中使用Swift监听全局热键?
- ruby-on-rails-3.1 – 为什么我从Paperclip收到“Too many
- extjs ajax 通用写法
- 【转】深入浅出Flex组件生命周期Part2 ─ 使用ActionScript
- Flex datagrid 中实现combobox联动
- Oracle的TX锁(行级锁、事务锁)
- ios – 无法在设备上启动该应用
- ruby-on-rails – Ruby 1.9.3 UndefinedConversionError