【发布时间】:2015-01-30 07:46:04
【问题描述】:
功能-
创建函数:
-- Function: created_func()
CREATE OR REPLACE FUNCTION created_func()
RETURNS trigger AS
$BODY$
BEGIN
-- Remember who changed the payroll when
NEW.created_ts := current_timestamp;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION created_func()
OWNER TO postgres;
更新功能:
-- Function: updated_func()
CREATE OR REPLACE FUNCTION updated_func()
RETURNS trigger AS
$BODY$
BEGIN
-- Remember who changed the payroll when
NEW.updated_ts := current_timestamp;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION updated_func()
OWNER TO postgres;
触发器-
创建触发器:
-- Trigger: created_func on drcschema.dr_event
CREATE TRIGGER created_func
BEFORE INSERT
ON drcschema.dr_event
FOR EACH ROW
EXECUTE PROCEDURE created_func();
更新触发器:
-- Trigger: update_func on drcschema.dr_event
CREATE TRIGGER update_func
AFTER UPDATE
ON drcschema.dr_event
FOR EACH ROW
EXECUTE PROCEDURE updated_func();
列-
created_ts:
-- 列:created_ts
ALTER TABLE drcschema.dr_event ADD COLUMN created_ts timestamp without time zone;
updated_ts:
-- 列:updated_ts
ALTER TABLE drcschema.dr_event ADD COLUMN updated_ts timestamp without time zone;
DrEvent.hbm.xml:
<property name="createdTs" type="timestamp" generated="insert">
<column name="created_ts" length="29" />
</property>
<property name="updatedTs" type="timestamp" generated="always">
<column name="updated_ts" length="29" />
</property>
插入和更新行后,我仍然没有在updated_ts 列中获得日期,如下所示-
【问题讨论】:
-
您无法更改 AFTER UPDATE 触发器中的列。您需要一个 BEFORE UPDATE 触发器
标签: java postgresql triggers