Postgres | ЕСЛИ оператор с условным ИЛИ
У меня есть хранимая процедура, которая используется для проверки входящей переменной. Если переменная не 'maker' или 'member', она должна выдать ошибку. Если переменная относится к двум вышеупомянутым, она должна продолжить нормальную обработку.
В настоящее время проблема с приведенным ниже кодом заключается в том, что он всегда возвращает false, поэтому всегда выдает ошибку, не имеет значения, если переменная имеет тип "maker", "member" или что-то еще.
Любые идеи о том, где я могу смотреть на мою логическую структуру неправильно?
CREATE OR REPLACE FUNCTION validate_creator_type (
"creator_type" VARCHAR(25) -- $1
) RETURNS VOID AS $$
DECLARE
_maker VARCHAR(25) := 'maker';
_member VARCHAR(25) := 'member';
BEGIN
-- Validate the creator type is allowed
IF ($1 <> _maker) OR ($1 <> _member) THEN
RAISE EXCEPTION 'Invalid creator type ---> %', $1
USING HINT = 'The creator type can only be member or maker';
END IF;
END $$
SECURITY DEFINER
LANGUAGE plpgsql;
1 ответ
Решение
Измените ИЛИ на И, и ваша проблема должна исчезнуть
CREATE OR REPLACE FUNCTION validate_creator_type (
"creator_type" VARCHAR(25) -- $1
) RETURNS VOID AS $$
DECLARE
_maker VARCHAR(25) := 'maker';
_member VARCHAR(25) := 'member';
BEGIN
-- Validate the creator type is allowed
IF ($1 <> _maker) AND ($1 <> _member) THEN
RAISE EXCEPTION 'Invalid creator type ---> %', $1
USING HINT = 'The creator type can only be member or maker';
END IF;
END $$
SECURITY DEFINER
LANGUAGE plpgsql;