使用 Mybatis 将布尔参数传递给存储过程

Posted

技术标签:

【中文标题】使用 Mybatis 将布尔参数传递给存储过程【英文标题】:Passing boolean parameter to stored procedure with 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 语句可能会有所帮助。 【参考方案1】:

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

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

【讨论】:

以上是关于使用 Mybatis 将布尔参数传递给存储过程的主要内容,如果未能解决你的问题,请参考以下文章

将表值参数传递给存储过程

使用 PHP PDO 将参数传递给 SQL Server 存储过程

VBScript:将具有空值的参数传递给存储过程?

将参数传递给C#中的存储过程

VBA 将日期参数传递给 SQL Server 存储过程

如何在spring hibernate中使用@NamedNativeQuery将参数传递给存储过程