触发器:执行在条件验证时触发它的查询

时间:2013-07-21 14:48:44

标签: postgresql triggers plpgsql

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

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,请尝试:

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

的Osvaldo

答案 1 :(得分: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);