postgresql функция, которая вставляет и проверяет - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь создать функцию, которая вставляет нового человека из таблицы и проверяет пол человека (должен быть «мужской» или «женский»). Я знаю, как создать функцию, которая вставляет нового человека, и я знаю, как создать функцию, которая вызывает исключение, если пол теперь мужской или женский. Но я не знаю, как сделать это в одной функции и без использования триггера.

У меня уже есть что-то вроде этого:

CREATE OR REPLACE FUNCTION InsertPerson(IN _id INTEGER, IN _name VARCHAR(50), IN _gender CHAR(1))
RETURNS void
AS 
$$

  BEGIN

    IF NEW.gender <> 'Female' AND NEW.gender <> 'Male' THEN
       RAISE EXCEPTION 'Gender must be either Female or Male';
    END IF;


    INSERT INTO Person (ID, name, gender)
    VALUES(_id, _name, _gender);


  END;
$$ LANGUAGE plpgsql;

Может кто-нибудь, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 19 марта 2020

Я бы не делал проверку в функции. Что если кто-то вставит прямо в таблицу, минуя функцию? Проверочное ограничение было бы лучше.

ALTER TABLE person
            ADD CHECK (gender IN ('Female', 'Male'));

Если вы настаиваете на функции, просто отметьте _gender (который должен быть длиннее одного символа, если он может содержать Female или Male) вместо new.gender.

...
IF _gender <> 'Female'
   AND _gender <> 'Male' THEN
  RAISE EXCEPTION 'Gender must be either Female or Male';
END IF;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...