Выберите 1 в переменной postgresql?

У меня есть этот оператор выбора внутри процедуры триггера:

  SELECT 1 FROM some_table WHERE "user_id" = new."user_id"
  AND created >= now()::date;

Как я могу сохранить результат в переменной и повторно использовать его в операторе IF следующим образом:

IF NOT EXISTS (var_name) THEN ...;

процедура (сейчас у меня есть право выбора в операторе IF, но я хочу его отдельно)

CREATE OR REPLACE FUNCTION add_row() RETURNS TRIGGER AS $$
  BEGIN
    //need to check if row was created around today
    IF NOT EXISTS (SELECT 1 FROM some_table WHERE "user_id" = new."user_id"
  AND created >= now()::date) THEN
      INSERT INTO another_table VALUES(1, 2, 3);
    END IF;
  END;
$$ LANGUAGE plpgsql;

1 ответ

Решение

Чтобы сохранить результат запроса в переменной, вам нужно объявить переменную. Тогда вы можете использоватьselect .. into ..для хранения результата. Но я бы использовалboolean и существует условие для этой цели.

CREATE OR REPLACE FUNCTION add_row() 
  RETURNS TRIGGER 
AS $$
declare
  l_row_exists boolean;
BEGIN
  select exists (SELECT *
                 FROM some_table 
                 WHERE user_id = new.user_id
                  AND created >= current_date)
    into l_row_exists;

  IF NOT l_row_exists THEN
    INSERT INTO another_table (col1, col2, col3)
    VALUES(1, 2, 3);
  END IF;
END;
$$ LANGUAGE plpgsql;

Однако для начала вам действительно не нужен оператор IF. Вы можете упростить это до одного оператора INSERT:

INSERT INTO another_table (col1, col2, col3)
SELECT 1,2,3 
WHERE NOT EXISTS (SELECT *
                  FROM some_table 
                  WHERE user_id = new.user_id
                    AND created >= current_date);
Другие вопросы по тегам