当前位置: 首页 > 知识库问答 >
问题:

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

方河
2023-03-14

需要您的帮助,我不明白为什么会出现以下错误,我不是专业的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);

错误:函数logintry(未知,未知,带时区的时间戳,整数)不存在第1行:选择logintry('Jon.Jones88@gmail.com','_@kjhfdb987',...^HINT:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。SQLstate: 42883 Character: 8

共有1个答案

江煜
2023-03-14

您已经将最后一个参数定义为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);

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

 类似资料:
  • 我使用sqoop将表从Postgres导入到hdfs。我的表有uuid字段作为主键,我的命令sqoop如下: 但我得到了错误: 我尝试执行sql命令:并得到相同的错误。我该如何解决它?我使用后记 9.4、哈多普 2.9.0 和 sqoop 1.4.7

  • 我能够通过一个PHP脚本用这些完全相同的凭证连接到< code>protomolecule数据库。如图所示,试图在PhpStorm中设置它失败了。 如果我将数据库更改为默认的数据库,它在PhpStom中连接得很好。我不明白为什么用户只能连接到而不是其他任何东西。 我尝试设置新用户和新数据库无济于事。 编辑:根据要求添加了下面的工作PHP脚本设置。

  • 我有一个表,它有20个整数列和一个名为“foo”的文本列 如果我运行查询: 我得到一个错误: 我已经核实过他的专栏确实存在。如果我这样做: 结果输出将“foo”显示为一列。。。。我猜我必须在查询中做一些特殊的事情,因为foo是一个文本列。。。 感谢您的帮助(POSTGRESQL 8.3)

  • 问题内容: 我是Java编程语言的初学者,最近我研究了 构造函数 不能在Java中继承,有人可以解释 为什么 吗? 问题答案: 简而言之,构造函数不能被继承,因为在子类中它具有​​不同的名称(子类的名称)。 您只能执行以下操作: 相反,方法是使用“相同名称”继承的,可以使用。 理由如下:继承构造函数没有多大意义,因为类A的构造函数意味着创建类型A的对象,而类B的构造函数意味着创建类B的对象。 不过

  • 我在PostgreSQL中有一个存储过程,我想在表中进行插入。我从这个过程中得到了一些参数,并使用它们尝试在其他表上选择其他属性。 这是我的存储过程: 当我试图执行时,它抛出一个错误,说:“错误:列“customer_code”不存在”,“提示:表“sales_invoice_header”中有一个名为“customer_code”的列,但不能从查询的这一部分引用它。” 表客户是存在的,有一个名为

  • 问题内容: 这个psql会话代码段应该是不言自明的: 问题是Postgres函数不喜欢字段类型,但是根据文档,此调用应该是完全正确的吗? 问题答案: 使用显式类型转换: 或更改列输入。 为什么? Postgres允许函数重载。函数签名是由它们的(可选的,由 模式 限定的) 名称 加上 输入参数类型 (的列表)定义的。期望类型的2参数形式 作为第一个参数: 如果没有现有函数 完全 匹配,则“函数类型