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

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;

版权声明:本文为weixin_40764017原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。