Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数在postgreSQL中不存在。。为什么?_Postgresql - Fatal编程技术网

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

函数在postgreSQL中不存在。。为什么?,postgresql,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

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


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

您需要使用:

select loginattempt ('Jon.Jones88@gmail.com','+_@kjhfdb987', now());
由于您没有写入参数
尝试
我看不出有什么理由首先将其定义为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);

联机示例:

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

您需要使用:

select loginattempt ('Jon.Jones88@gmail.com','+_@kjhfdb987', now());
由于您没有写入参数
尝试
我看不出有什么理由首先将其定义为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);

< P>在线示例:

你的Postgres版本(<代码>选择版本()),<代码>将告诉你,PostgreSQL 10.5,由VisualC++生成的1800, 64位,是你的Postgres版本(<代码>选择版本());PostgreSQL 10.5,由Visual C++编译生成1800, 64个比特,为什么我在挖掘函数Login尝试中得到2个未知的参数类型,如从错误消息中可以看到的?@ Mak.Burkov:你需要将<代码> 1 <代码>转换为SimultIt。并且你还应该确保你的函数参数与列没有相同的名称,以避免混淆为什么G。从错误消息?@Maks.Burkov中可以看到,mine函数LoginAttent中有两个未知参数类型?@Maks.Burkov:您需要将

1
转换为smallint。此外,您还应该确保函数参数与列的名称不同,以避免混淆