我正在将现有的SQL Server 2005数据库转换为PostgreSQL 9.0数据库。
到目前为止一切正常。我想将SQL触发器转换为PostgreSQL,但是触发器功能有问题。
我不知道如何在PostgreSQL语法中实现临时表inserted
。在SQL Server中,inserted
表存在但不存在于PostgreSQL中。有什么想法吗?
我的代码(PostgreSQL):
CREATE OR REPLACE FUNCTION func_co_insert()
RETURNS trigger AS
$BODY$begin
declare
aa bigint;
begin
select aa = co_id from inserted;
update com03 set co_creationdate = CURRENT_TIMESTAMP,
co_creationby = USER where co_id = aa;
end;
end;
这里是SQL Server 2005代码的触发器主体的代码
begin
declare @aa bigint;
select @aa = se_id from inserted;
update server set se_creationdate = CURRENT_TIMESTAMP , se_creationby = USER where se_id = @aa;
end;
感谢
克里斯
答案 0 :(得分:3)
PostgreSQL中的默认值是行级触发器(而不是SQL Server,它是语句级触发器),因此不需要“插入”表来进行选择。
可以使用关键字new
和old
访问新旧值(插入触发器不存在旧值)。
在您的情况下,声明只是:
update com03
set co_creationdate = CURRENT_TIMESTAMP,
co_creationby = CURRENT_USER
where co_id = new.co_id;
无需“从插入中选择”。
这假设触发器不触发表com03
。如果您的触发器触发com03
(您没有告诉我们),那么它就更容易了:
new.co_creationdate := current_timestamp;
new.co_creationby := current_user;
有关详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/plpgsql-trigger.html
该页面还包含一个完全符合您要实现的目标的示例