2

说,我在 MyBatis 映射器中有以下用于 postgres 表的内容:

    <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; 
...

我想知道我是否朝着正确的方向前进,是否有人能说出触发器的其余部分会是什么样子(如果开始看起来合适的话)。一个建议会很有帮助,谢谢你的建议。

4

1 回答 1

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})

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

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

于 2012-05-21T21:48:37.717 回答