Выберите 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);