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
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
解决方案
您已将最后一个参数定义为 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;
由于该值1
被假定为整数,因此您需要在调用函数时转换该值:
select loginattempt ('Jon.Jones88@gmail.com','+_@kjhfdb987', now(), 1::smallint);
推荐阅读
- c++ - 如何在 CPP 中内联指针?
- javascript - url中使用的加法符号是什么?
- python - 返回最长批次 NaN 的索引
- sql - SQL 更新表与连接另一个表的所有相应数据?
- mongodb - mongodb atlas api 创建旧版备份还原作业
- java - 如何将联接表映射为实体 JPA
- javascript - 我可以更改闭包内的全局变量的引用吗?
- c# - ASP.Net Core 3.1 MVC - 带有对象列表的多选
- floating-point - 将 PoolByteArray 转换为浮点数
- php - 未捕获的异常 'Fuel\Core\PhpErrorException' ....系统的时区设置