我们希望在基于注释的对oracle函数的调用中获得一个clob字段。此函数返回CLOB字段Oracle。我们有这样的代码:
@Select("{ #{result, javaType=java.lang.String ,jdbcType = CLOB, mode=OUT } = call pkg_exportacion_datos.f_recupera_dgp_pac( "
+ "#{cipAuto, jdbcType=VARCHAR, mode=IN},#{idExplotacion, jdbcType=NUMERIC, mode=IN} )}")
@Options(statementType = StatementType.CALLABLE)
@Results(
value = {
@Result(
property = "result",
column = "result",
javaType = String.class)
})
String getListadoDGPPaciente(String cipAuto,long idExplotacion,String result);我们可以在ClobTypeHandler上调试私有字符串toString( clob )抛出SQLException,并且在这个方法字段中CLOB有一个有效值,但是这个值在变量结果中不返回。内部变量resul设置了一个空值。
有人能帮我吗?
谢谢。
发布于 2021-03-19 14:29:30
该方法应如下所示:
@Update({
"{#{result,javaType=java.lang.String,jdbcType=CLOB,mode=OUT}",
"= call pkg_exportacion_datos.f_recupera_dgp_pac(",
"#{cipAuto,jdbcType=VARCHAR,mode=IN},",
"#{idExplotacion,jdbcType=NUMERIC,mode=IN}",
")}"
})
@Options(statementType = StatementType.CALLABLE)
void getListadoDGPPaciente(ParamBean param);注意,结果是作为OUT参数返回的,而不是方法返回值。
因此,您应该使用@Update或@Insert而不是@Select。
要接收OUT参数,方法参数必须是Map或bean,如下所示。
public class ParamBean {
private String cipAuto;
private long idExplotacion;
private String result;
// getters / setters
}调用该方法的代码如下所示。
ParamBean param = new ParamBean();
param.setCipAuto("foo");
param.setIdExplotacion(123L);
mapper.getListadoDGPPaciente(param);
return param.getResult(); // returns the CLOB as a Stringhttps://stackoverflow.com/questions/66707652
复制相似问题