我想创建计算两个日期之间的天数的函数,结果存储在表格中的列
功能和触发器:
CREATE FUNCTION dur()
RETURNS TRIGGER
AS $$
BEGIN
NEW.duration = NEW.dateTO - NEW.dateFROM;
INSERT INTO calc(duration) VALUES (NEW.duration);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER dur
BEFORE INSERT ON calc
FOR EACH ROW EXECUTE PROCEDURE dur();
表:
CREATE TABLE calc(
idU SERIAL PRIMARY KEY,
dateFROM DATE NOT NULL,
dateTO DATE NOT NULL,
duration INTEGER );
当我出现新的INSERT INTO错误时出现:
PL / pgSQL函数“dur”在SQL语句中的第4行 SQL语句“INSERT INTO calc(duration)VALUES(NEW.duration)”
答案 0 :(得分:1)
您没有发布错误,只是导致错误的声明。
切入追逐:摆脱那个插入语句。您可能会级联触发器,导致它一次又一次地调用自己。设置NEW.dur然后返回NEW将在您要插入的行中设置该值。
答案 1 :(得分:0)
如果我明白了,你必须自动计算duration
字段,如果是这样,你就是要删除:
INSERT INTO calc(duration) VALUES (NEW.duration);
因为您已经使用以下方式计算了该字段:
NEW.duration = NEW.dateTO - NEW.dateFROM;