【发布时间】:2016-06-08 05:35:40
【问题描述】:
我正在尝试执行 Oracle 存储过程,并将结果映射到 POJO,mybatis/spring 使用注释(即不是 XML)。存储过程的输入/输出是:
P_INPUT VARCHAR2 IN
P_OUTPUT VARCHAR2 OUT
P_COUNT BINARY_INTEGER OUT
POJO 看起来像这样:
public class MyRecord {
private String output;
private Integer count;
// getters and setters...
}
this example 中的 sn-p 表示它适用于 Oracle,它对我来说非常适合 MySQL 存储过程。但是,当我尝试对 Oracle 存储过程执行以下操作时:
@Select(value= "{ CALL my_user.some_package.my_proc('${input}') }")
@Options(statementType = StatementType.CALLABLE)
@ResultType(MyRecord.class)
@Results({
@Result(property="output", column="P_OUTPUT"),
@Result(property="count", column="P_COUNT"),
})
MyRecord parseMyInput(@Param("input") String input);
...它抛出了以下错误:
bad SQL grammar []; nested exception is java.sql.SQLException: ORA-06550
PLS-00306: wrong number or types of arguments in call to 'my_proc'
PL/SQL: Statement ignored
从错误消息中,听起来传递给函数的字符串可能与 Oracle 的 VARCHAR2 不兼容,或者我以某种方式发送了多个参数。我传递给函数的字符串是(12345)。
你能看出我做错了什么吗?
【问题讨论】:
-
这是一个 Oracle 程序,所以您也必须传递这些参数。它可以作为参考。它会是这样的:
{ CALL my_user.some_package.my_proc('${input}', '${out1}', '${out2}') }但我不知道如何在 MyBatis 注释上做到这一点。 -
也许这会对你有所帮助:stackoverflow.com/questions/9215784/…
-
另一个甚至使您的问题重复的问题:stackoverflow.com/questions/24910795/…
-
非常感谢,@JorgeCampos。重复问题中的答案对我不起作用,但我现在正在尝试您的其他建议。
-
您是否像在重复问题中一样测试了传递参数?类似于:
{ CALL my_user.some_package.my_proc('${input, mode=IN, jdbcType=VARCHAR}', '${out1, mode=OUT, jdbcType=VARCHAR}', '${out2, mode=OUT, jdbcType=INTEGER }')
标签: oracle stored-procedures mybatis spring-mybatis