1

我正在研究postgres,我会知道是否有一种简单的方法可以在触发器内部执行调用查询,而无需在触发器内部再次编写它。我自己解释。我有一个表上的 INSERT 查询和一个在 INSERT 之前执行的触发器。如果验证了一个条件,那么我将执行查询而不在触发器内重写它(使用 NEW 变量)。

4

2 回答 2

1

如果我正确理解您的问题,请尝试:

IF (condition) THEN  
    RETURN new;
ELSE  
    -- statements
END IF;  

奥斯瓦尔多

于 2013-07-21T16:29:27.510 回答
0

好吧,这取决于您有什么查询,但是您可以使用一个函数并在其中编写查询:

create table test (number int);

CREATE OR REPLACE FUNCTION fn_test_insert("number" integer)
RETURNS void AS
$BODY$
insert into test (number) -- this is your insert query
    select $1
$BODY$
LANGUAGE sql;

CREATE OR REPLACE FUNCTION tr_fn_test_insert()
RETURNS trigger AS
$BODY$
begin
perform fn_test_insert(new.number + 1); -- calling your insert query with new + 1
    return new;                         -- as example
end
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER tr_test_insert
AFTER INSERT
ON test
FOR EACH ROW
WHEN ((new.number < 10))
EXECUTE PROCEDURE tr_fn_test_insert();

select fn_test_insert(1);
于 2013-07-21T17:19:59.077 回答