У меня есть функция, которая должна динамически проверять ввод на основе типа значения. Это достигается путем нахождения ограничения в другой таблице, но для простоты я также предоставлю ограничение в приведенной ниже функции.
Эта другая таблица содержит (value_type, value_constraint), где value_constraint представляет собой текстовое поле, которое содержит, например, value::int > 0
. Мне нужно динамически проверить это ограничение в моей функции вставки. Я пытался сделать это, используя EXECUTE
, как показано ниже, но это не работает.
Как динамически выполнить оператор условия и получить значение в виде логического значения в v_successful_insert
?
CREATE OR REPLACE FUNCTION insert_value(p_value_type text, p_value_constraint text, p_value text) RETURNS boolean
AS $$
DECLARE
v_successful_insert bool;
BEGIN
EXECUTE p_value_constraint INTO v_successful_insert;
IF v_successful_insert THEN
INSERT INTO my_table (value_type, value)
VALUES (p_value_type, p_value);
END IF;
RETURN v_successful_insert;
END;
$$
LANGUAGE plpgsql volatile;
Код запускается на Postgresql 10.6.