Синтаксическая ошибка не может понять, что не так - PullRequest
0 голосов
/ 21 октября 2018

Нужна ли вам помощь, пожалуйста, скажите мне, что я делаю неправильно в этой функции?В соответствии с примерами документов все должно работать .. документы

create or replace function loginValidator(nickname varchar, email varchar, u_password varchar) returns boolean as $$
DECLARE
    checked boolean := false; n_regex varchar; e_regex varchar; p_regex varchar;
BEGIN 

 BEGIN;

  select nickname_r into n_regex from regex;
  select email_r into e_regex from regex;
  select password_r into p_regex from regex;

  IF n_regex ~ nickname AND e_regex ~ email AND p_regex ~ u_password THEN checked := true;

 COMMIT;

 return checked;
END;
$$ language plpgsql;

ОШИБКА: синтаксическая ошибка в или около ";"ЛИНИЯ 6: НАЧАЛОСЬ;^ Состояние SQL: 42601 Символ: 222

1 Ответ

0 голосов
/ 21 октября 2018

Вам не хватает END IF.Я бы переписал это как:

create or replace function loginValidator(nickname varchar,
                                          email varchar,
                                          u_password varchar)
returns boolean 
as
$$
DECLARE
    checked boolean := false; n_regex varchar; e_regex varchar; p_regex varchar;
BEGIN 
  -- removed BEGIN
  select nickname_r, email_r, password_r into n_regex, e_regex, p_regex from regex;

  IF n_regex ~ nickname AND e_regex ~ email AND p_regex ~ u_password 
  THEN checked := true;
  END IF;    -- added END IF;
  -- removed COMMIT;

  RETURN checked;
END;
$$ language plpgsql;

или даже проще:

create or replace function loginValidator(nickname varchar,
                                          email varchar,
                                          u_password varchar)
returns boolean 
as
$$
BEGIN 

  RETURN  (select COUNT(*) 
          from regex
          WHERE nickname_r ~ nickname
            AND  email_r ~ email
            AND password_r ~ u_password)::boolean;

END;
$$ language plpgsql;

Я надеюсь, что вы не записываете пароли в виде открытого текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...