如何在PostgreSQL中正确执行stored procedure存储过程
问题原因及解决方法
- PostgreSQL 没有
exec语法,这是 SQL Server 专属的存储过程调用语法,PostgreSQL 11 及以上版本调用存储过程需要使用CALL命令。 - 你收到的报错含义为「同名且参数类型一致的存储过程已存在」,是因为你的删除语句逻辑有误:你删除的是无参数的
checkName()存储过程,而你要创建的是带varchar类型参数的checkName(varchar),如果之前已经创建过同名同参数的存储过程,旧实例没有被正确删除,自然会触发重复创建的报错。
正确操作步骤
- 先删除已存在的带参数的存储过程
DROP PROCEDURE IF EXISTS checkName(varchar);
- 再执行你原有的存储过程创建语句即可
- 调用存储过程使用如下语法
CALL checkName('ThisIsTest');
额外代码优化建议
你代码中 declare notify_msg text := 0; 写法存在隐式类型转换,数字0会被自动转成文本,建议直接写成 declare notify_msg text := ''; 更符合规范。
内容的提问来源于stack exchange,提问作者Kil Gore
相关产品推荐
相关产品推荐

