函数在postgreSQL中不存在..为什么?

时间:2018-10-22 06:39:49

标签: postgresql

请需要您的帮助,无法理解为什么出现以下错误,我不是专业的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(未知,未知,带时区的时间戳,整数)不存在   第1行:选择loginattempt(“ Jon.Jones88@gmail.com”,“ + _ @ kjhfdb987”,...                  ^   提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。   SQL状态:42883   人物:8

enter image description here

1 个答案:

答案 0 :(得分:3)

您已将最后一个参数定义为OUT参数,这意味着您无法为其传递值。

您需要使用:

$StackTrace

由于您没有在写参数Major Minor Build Revision ----- ----- ----- -------- 2 0 -1 -1 ,因此没有理由将其定义为out参数。您可以根据需要简单地返回值:

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

由于值attempts被假定为整数,因此在调用函数时需要强制转换该值:

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;

在线示例:https://rextester.com/YNIQ55561