2012-05-21 1 views
2

Say, я следующий в 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}) 

, то вы получите тот же эффект. Он вернет значение NULL, если нет строки с этим значением для столбца baz.

(Отказ от ответственности: я не знаю MyBatis, так что я не знаю, если это можно указать такое заявление)

+0

+1 Кажется, что путь. –

 Смежные вопросы

  • Нет связанных вопросов^_^