Mybatis - 调用Oracle存储过程与PostgreSql存储过程的差异

本文对比了Mybatis在调用Oracle和PostgreSQL存储过程时的代码差异,讨论了参数传递方式和resultType设置,并介绍了存储过程的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis调用Oracle存储过程与PostgreSql存储过程的差异

DemoService代码

Oracle:
public String callProc()throws Exception {
    Map<String, Object> param=new HashMap<>();
    param.put("P_UUID", "sid");
    param.put("P_CODE", "");
    param.put("P_ERROR", "");
    demoMapper.callProc(param);
    Object perror = param.get("P_CODE");//执行结果获取
    return perror.toString();
}
PostgraSql:
public String callProc()throws Exception {
    Map<String, Object> param=new HashMap<>();
    param.put("P_UUID", "sid");
    param.put("P_CODE", "");
    param.put("P_ERROR", "");
    Map<String, Object> res=demoMapper.callProc(param);
    Object perror = res.get("P_CODE");//执行结果获取
    return perror.toString();
}

DemoMapper.class

Oracle:
    void callProc(Map<String, Object> param);
PostgraSql:
    Map<String, Object> callProc(Map<String, Object> param);

DemoMapper.xml

Oracle:
<select id="callProc" parameterType="Map" statementType="CALLABLE">
  CALL proc_demo(
    #{P_UUID,mode=IN,jdbcType=VARCHAR},
    #{P_CODE ,mode=OUT,jdbcType=VARCHAR},
    #{P_ERROR,mode=OUT,jdbcType=VARCHAR}
)
</select>
<!--PostgraSql:PostgreSQL数据库mode只有IN类型-->
<select id="callProc" parameterType="Map" statementType="CALLABLE"  resultType="map">
  CALL proc_demo(
    #{P_UUID,mode=IN,jdbcType=VARCHAR},
    #{P_CODE ,mode=IN,jdbcType=VARCHAR},
    #{P_ERROR,mode=IN,jdbcType=VARCHAR}
)
</select>

存储过程

CREATE OR REPLACE PROCEDURE proc_demo(P_UUID IN VARCHAR2,P_CODE IN OUT varchar2,P_ERROR IN OUT varchar2)
as
begin

  ........
  
exception
    when others then
    rollback;
    P_CODE := sqlcode;
    P_ERROR:=substr(sqlerrm, 1, 1000);
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值