Postgres | ЕСЛИ оператор с условным ИЛИ - PullRequest
0 голосов
/ 26 июня 2018

У меня есть хранимая процедура, которая используется для проверки входящей переменной. Если переменная не '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 Ответ

0 голосов
/ 26 июня 2018

Измените ИЛИ на И и ваша проблема должна исчезнуть

    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;
...