[英]Trigger insert of data into table with result from another select query
从 SQL 开始我的第一步。
我正在尝试将带时间戳的表的最后一行插入到另一个表中。
我写了这个触发器:
CREATE TRIGGER update_analysis()
AFTER INSERT ON data
FOR EACH ROW
EXECUTE PROCEDURE insert_to_analysis();
我定义了一个 function,我知道这是错误的,但不明白如何正确编写。 (目标表有这些列)
CREATE FUNCTION UPDATE_ANALYSIS() RETURNS TABLE
AS
$$ BEGIN
INSERT INTO ANALYSIS (TIME, CYCLE_NUMBER,CAT1,CAT2,CAT3)
SELECT (TIME, CYCLENO , I1 , I2 * 2 ,I3*3)
FROM DATA
ORDER BY TIME DESC
LIMIT 1;)
RETURN
END;
$$ LANGUAGE 'plpgsql';
提前致谢
由于它是一个触发器的 function,它应该返回一个触发器。
它适用于每一行,因此可以从值中插入。
例子
CREATE FUNCTION FN_INSERT_TO_ANALYSIS() RETURNS TRIGGER AS $ins_analysis$ BEGIN INSERT INTO ANALYSIS (TIME, CYCLE_NUMBER, CAT1, CAT2, CAT3) VALUES (NEW.TIME, NEW.CYCLENO, NEW.I1, NEW.I2 * 2, NEW.I3 * 3); RETURN NEW; END $ins_analysis$ LANGUAGE 'plpgsql';
CREATE TRIGGER trg_data_ins_analysis AFTER INSERT ON data FOR EACH ROW EXECUTE PROCEDURE fn_insert_to_analysis();
insert into data values (current_timestamp,1,1,1,1)
select * from data
时间 | 循环无 | i1 | i2 | i3 |
---|---|---|---|---|
2021-12-27 14:53:17.822649 | 1 | 1 | 1 | 1 |
select * from ANALYSIS
时间 | 周期数 | 猫1 | 猫2 | 三类 |
---|---|---|---|---|
2021-12-27 14:53:17.822649 | 1 | 1 | 2 | 3 |
关于db<>fiddle 的演示在这里
如果您引用刚刚插入的相同数据data
,您可以简单地引用您插入的内容而不是SELECT
:ing,如下所示:
CREATE FUNCTION UPDATE_ANALYSIS() RETURNS TABLE
AS
$$ BEGIN
INSERT INTO ANALYSIS (TIME, CYCLE_NUMBER,CAT1,CAT2,CAT3)
VALUES (NEW.TIME, NEW.CYCLENO , NEW.I1 , NEW.I2 * 2 ,NEW.I3 * 3);
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.