2012-05-21 81 views
2

说,我该在的MyBatis映射为一个Postgres表如下:PostgreSQL触发符合条件

<select id="selectValues" parameterType='int' resultType="SomeType"> 
     select foo from bar where baz=#{qux} 
    </select> 

SOMETYPE值的列表可以从表中可以返回。但我想用触发器的帮助来检查,如果返回的列表是空的,如果是,则给它一个空值。它可能看起来像:

CREATE TRIGGER mytrigger AFTER select ON bar FOR EACH STATEMENT EXECUTE PROCEDURE trigger_after_select(); 

CREATE FUNCTION trigger_after_select() RETURNS trigger AS ' 
BEGIN 
if (select count(*) from bar)=0 
then return NULL; 
... 

我不知道如果我在朝着正确的方向,如果有人能告诉如何触发的其余部分将看起来像(如果一开始看起来适用)。建议将有助于建议。

回答

3

Postgres中没有“SELECT”触发器。

如果你改变你的SQL语句:

select foo from bar where baz=#{qux} 
union all 
select null where not exists (select 1 from bar where baz=#{qux}) 

,那么你会得到同样的效果。如果列baz没有那个具有该值的行,它将返回一个NULL值。

(声明:我不知道MyBatis的,所以我不知道这是否是可以指定这样的说法)

+0

+1好像要走的路。 –