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;
Другие вопросы по тегам