我有一个问题我现在已经坚持了一段时间。所以我想寻求一些帮助。
我有两个持有相同数据的表:交易和交易2.
我想编写一个触发器,每次在事务中添加新行并将其插入到PLSQL的transaction2中时触发。
首先,我只是用
复制表格 CREATE TABLE transactions2 (SELECT * FROM transactions WHERE 1=1);
我想我发现了如何插入
CREATE OR REPLACE FUNCTION copyRow RETURNS TRIGGER AS $$
DECLARE
BEGIN
INSERT INTO transaction2
VALUES transaction;
END;
我认为这个语法也是错误的,但是我怎么说,一旦新的Insert插入到第一个表中,Trigger就应该开始了?
任何人都可以帮我吗?
由于 波比
答案 0 :(得分:0)
INSERT
的正确语法是INSERT (<column list>) VALUES (<values list>)
。函数与“outside”相比,INSERT
语法没有区别。因此,您的触发器功能应如下所示:
CREATE OR REPLACE FUNCTION t2t2_f ()
RETURNS TRIGGER
AS
$$
BEGIN
INSERT INTO transactions2
(column_1,
...,
column_n)
VALUES (NEW.column_1,
...,
NEW.column_n);
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
将column_i
替换为表格的实际列名称。 NEW
是一个伪记录,您可以使用该记录访问新行的值。
要创建触发器本身,请使用以下内容:
CREATE TRIGGER t2t2_t
AFTER INSERT
ON transactions
FOR EACH ROW
EXECUTE PROCEDURE t2t2_f();
您可能想要使用其他时间,例如BEFORE
代替AFTER
。
这应该给你一些东西。请考虑研究全面的PostgreSQL Manual以获取更多更详细的信息。