функция не существует в postgreSQL .. Почему? - PullRequest
0 голосов
/ 22 октября 2018

Нужна ваша помощь, пожалуйста, не могу понять, почему я получил следующую ошибку, я не профессиональный разработчик postgresql ..

Как вы можете видеть созданную функцию, так почему функция не существует?

create or replace function loginAttempt (u_email character varying, u_password character varying, date_time timestamptz, OUT attempt smallint) returns smallint AS $$
   BEGIN
        INSERT INTO login_attempts (typed_password, date_time, attempt_nu, email) VALUES (u_password, date_time, attempt_nu, email);
        IF attempt = 3 THEN INSERT INTO warnings (u_email,u_password) VALUES (u_email,u_password);
        END IF;
   END;
$$ LANGUAGE plpgsql;


  select loginattempt ('Jon.Jones88@gmail.com','+_@kjhfdb987', now(), 1);

ОШИБКА: функция loginattempt (неизвестно, неизвестно, отметка времени с часовым поясом, целое число) не существует LINE 1: выберите loginattempt ('Jon.Jones88@gmail.com', '+ _@ kjhfdb987 ', ... ^ СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам понадобится добавить явное приведение типов. Состояние SQL: 42883 Символ: 8

enter image description here

1 Ответ

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

Вы определили последний параметр как параметр OUT, это означает, что вы не можете передать значение для него.

Вам необходимо использовать:

select loginattempt ('Jon.Jones88@gmail.com','+_@kjhfdb987', now());

Поскольку вы не записываете в параметр attempts Я не вижу причины для определения его как параметра out для начала.Вы можете просто вернуть значение, если оно вам необходимо:

create or replace function loginAttempt (u_email character varying, u_password character varying, u_date_time timestamptz, u_attempt smallint) 
  returns smallint 
AS $$
BEGIN
  INSERT INTO login_attempts (typed_password, date_time, attempt_nu, email) 
  VALUES (u_password, u_date_time, u_attempt, u_email);
  IF u_attempt = 3 THEN 
    INSERT INTO warnings (u_email,u_password) VALUES (u_email,u_password);
  END IF;
  return u_attempt;
END;
$$ LANGUAGE plpgsql;

Поскольку предполагается, что значение 1 является целым числом, вам необходимо привести это значение при вызове функции:

select loginattempt ('Jon.Jones88@gmail.com','+_@kjhfdb987', now(), 1::smallint);

Онлайн пример: https://rextester.com/YNIQ55561

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