Bob*_*byP 4 postgresql stored-procedures
我有一个问题,我已经坚持了一段时间了。所以我想寻求一点帮助。
我有两个保存相同数据的表:transactions 和 transactions2。
我想编写一个触发器,每次将新行添加到事务中时都会触发并将其插入到 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;
我认为这个语法也是错误的,但是我怎么说呢,触发器应该在第一个表中进行新插入后立即启动?
谁能帮我这个?
谢谢鲍比
an 的正确语法INSERT是INSERT (<column list>) VALUES (<values list>). 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;
Run Code Online (Sandbox Code Playgroud)
将column_is 替换为表的实际列名。NEW是一个伪记录,您可以使用它访问新行的值。
要创建触发器本身,请使用以下命令:
CREATE TRIGGER t2t2_t
AFTER INSERT
ON transactions
FOR EACH ROW
EXECUTE PROCEDURE t2t2_f();
Run Code Online (Sandbox Code Playgroud)
您可能想使用其他计时,例如BEFORE代替AFTER。
这应该会给你一些开始的东西。请考虑学习全面的PostgreSQL 手册以获取更多、更详细的信息。
| 归档时间: |
|
| 查看次数: |
6043 次 |
| 最近记录: |