说,我在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;
...
我想知道我是否朝着正确的方向前进,如果有人能够告诉触发器的其余部分是什么样子(如果开始看起来合适的话)。在建议中,建议会有所帮助。
答案 0 :(得分:3)
没有&#34; SELECT&#34;在Postgres中触发。
如果您将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,所以我不知道是否可以指定这样的陈述)