【问题标题】:sql trigger - update/insertsql 触发器 - 更新/插入
【发布时间】:2019-12-05 23:05:06
【问题描述】:

我正在努力解决的一件事是 SQL 中触发器的定义。我需要为给定的表实现一个代码,以便: - 对于表中插入的任何新行,触发器被激活并且表将当前日期存储在属性日期上。我对下面包含的代码的问题是更新表中的所有行,并且只希望插入的表使用当前日期更新。

CREATE FUNCTION func()
RETURNS trigger AS $$
DECLARE
value DATE;
BEGIN
SELECT CURRENT_DATE INTO fecha;
UPDATE tabla SET date = value;
RETURN NULL;
END;
$$LANGUAGE plpgsql;

CREATE TRIGGER date
AFTER INSERT ON table
FOR EACH ROW EXECUTE PROCEDURE func();

对于表中任何行的任何更新,触发器都会被激活并再次将当前日期存储在属性日期上。

CREATE FUNCTION func2()
RETURNS trigger AS $$
DECLARE
value DATE;
BEGIN
SELECT CURRENT_DATE INTO value;
SET NEW.date=value;
RETURN NULL;
END;
$$LANGUAGE plpgsql;

CREATE TRIGGER date
AFTER UPDATE ON table 
FOR EACH ROW
EXECUTE PROCEDURE func2();

【问题讨论】:

  • 哪个数据库?其中一些将取决于它是否是 sql server、postgres 等。请添加标签。我不知道标签“行”是什么意思,不管是谁添加的,对我来说似乎没用!
  • 您好,感谢您的快速回复。数据库是 postgress。

标签: postgresql sql-insert database-trigger


【解决方案1】:

使用BEFORE 触发器来操作正在插入/更新的行:

CREATE FUNCTION func()
RETURNS trigger AS $$
BEGIN
  NEW.date = CURRENT_DATE ;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER date
BEFORE INSERT OR UPDATE ON table
FOR EACH ROW EXECUTE PROCEDURE func();

【讨论】:

  • 您可以使用BEFORE INSERT OR UPDATE 将其简化为一个触发器。
猜你喜欢
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多