在postgres中调用触发器内部的布尔返回值的函数

时间:2013-12-03 12:18:32

标签: postgresql triggers

我试图在postgres中调用触发器内的函数。基本上我有一个功能,     

c.check_level(bigint, integer)
返回一个布尔值。

我想在触发器中调用此函数,如下所示:

CREATE OR REPLACE FUNCTION c.check_level_tg()
RETURNS trigger AS
$BODY$
DECLARE
    parent_id  int8;
    level int;
    result bool;
begin
    parent_id := NEW.fk_parent;
    level := NEW.level;

    select * from c.check_category_level(parent_id, level) as result;

    if (result) then
        return (NEW);
    else 
        return(NULL);
    end if;

END; 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION c.check_category_level_tg()
  OWNER TO postgres;

当我尝试将数据放入此触发器所在的表中时,出现错误: “错误:查询没有结果数据的目的地提示:如果要丢弃SELECT的结果,请改用PERFORM。语境:PL / pgSQL函数”。

单独运行时,函数c.check_level可以正常工作。

1 个答案:

答案 0 :(得分:3)

更改

select * from c.check_category_level(parent_id, level) as result;

成:

SELECT c.check_category_level(parent_id, level) INTO result;