【问题标题】:Passing boolean parameter to stored procedure with Mybatis使用 Mybatis 将布尔参数传递给存储过程
【发布时间】:2020-04-23 09:10:46
【问题描述】:

我试图在 Spring 项目中使用 Mybatis 调用 Oracle PL/SQL 过程。但是我收到以下错误: 原因:java.sql.SQLException: ORA-06553: PLS-306: 调用中的参数数量或类型错误

问题在于布尔参数,因为当我删除它时它运行良好。 (process_now 参数在过程中是可选的)当我使用 SQL Developer 调用存储过程时,它运行良好。

 <select id="processUser" statementType="CALLABLE" parameterType="UserResult">
 CALL myprocedure(
            user_id => #{userId, jdbcType=NUMERIC, mode=IN},
            description => #{description, jdbcType=VARCHAR, mode=IN},
            process_now => #{processNow, jdbcType=BOOLEAN, mode=IN},
            response => #{response, jdbcType=NUMERIC, mode=OUT}
        )

可能是什么问题?

【问题讨论】:

  • 在您的示例中,您缺少 process_now 参数前面的 #
  • 我在这里复制粘贴时错过了它。代码中,#没有问题
  • 打开日志并查看准备好的 SQL 语句可能会有所帮助。

标签: java spring plsql mybatis spring-mybatis


【解决方案1】:

我通过创建新的自定义包装程序并在其中声明布尔变量解决了这个问题。然后我将这些声明的变量传递给我的原始程序。这解决了我的问题。

这里是页面的链接:(阅读“包装 PL/SQL BOOLEAN、RECORD 和 TABLE 类型”部分) https://docs.oracle.com/cd/F49540_01/DOC/java.815/a64684/typesup1.htm

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多