You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MyBatis调用PostgreSQL存储过程报错提示需使用CALL如何解决

问题根因
  • PostgreSQL 11及以上版本的存储过程(PROCEDURE)与函数(FUNCTION)调用规则存在差异,你当前使用的{ call 存储过程名 }是JDBC标准转义语法,仅适用于调用函数,PostgreSQL JDBC驱动不支持通过该语法调用存储过程,要求直接使用原生CALL关键字执行存储过程。
  • 你使用<select>标签执行无结果集返回的存储过程,也会导致MyBatis执行逻辑匹配错误。
  • 报错信息中显示存储过程归属accounts schema,你的XML配置中未指定schema前缀,若会话默认schema不是accounts也会触发定位错误。
解决方案

直接修改XML Mapper配置:

  1. 将<select>标签替换为<update>标签(无结果集返回的存储过程使用更新类标签即可)
  2. 去掉{ } JDBC转义包裹符,直接使用原生CALL语法
  3. 补充存储过程归属的accounts schema前缀

修改后的配置如下:

<update id="executeStoredProcedure" statementType="CALLABLE">
    CALL accounts.update_login(
        aws_oracle_ext.TRUNC(#{date}) - (10 / 1440 || ' days')::INTERVAL, 
        aws_oracle_ext.TRUNC(#{date}) + (5 / 1440 || ' days')::INTERVAL, 
        1000
    )
</update>

修改后无需调整Mapper接口定义,直接调用即可。

内容的提问来源于stack exchange,提问作者Aeonstrife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:39:02