如何在 Java 整数上使用 MyBatis 封装布尔 Oracle 函数?

huangapple go评论54阅读模式
英文:

how to wrap a boolean oracle function on a java integer using mybatis?

问题

这是 pack_name.func_name 在 SQL Developer 中的工作:

使用 Spring 和 MyBatis,在处理 无法更新的旧 JDBC 驱动程序中的 Oracle 的 BOOLEAN 类型 时遇到问题。尝试 这个想法,我在我的 something-mapper.xml 中有以下内容:

<mapper namespace="java.packs.SomethingMapper">
    <select id="approvePO" parameterType="Map" statementType="PREPARED" resultType="Integer">
        begin
            #{oReturn,jdbcType=INTEGER,mode=OUT} := case when pack_name.func_name(
            #{I_po_num,jdbcType=INTEGER,mode=IN},
            #{I_pgm_id,jdbcType=INTEGER,mode=IN},
            #{O_err_msg,jdbcType=VARCHAR,mode=OUT},
            #{I_user,jdbcType=VARCHAR,mode=IN}
            ) then 1
            else 0
            end;
        end;
    </select>
</mapper>

其中该方法被声明为 void approvePO(final Map<String, Object> map);,但出现了以下错误:

### 在设置参数时发生错误
### SQL: begin                 ? := case when pack_name.func_name(                 ?,                 ?,                 ?,                 ?                 ) then 1                 else 0                 end;             end;
### 原因: java.sql.SQLException: 缺少索引为 1 的 IN 或 OUT 参数

以下是输入映射的调试信息:

如何在 Java 整数上使用 MyBatis 封装布尔 Oracle 函数?

但我无法理解应该如何更改才能使其正常工作。

英文:

so this is pack_name.func_name working at sql developer:
如何在 Java 整数上使用 MyBatis 封装布尔 Oracle 函数?

using spring and mybatis, i have the issue to deal with oracle's BOOLEAN type with an old jdbc driver that i cannot update. trying this idea, i have at my something-mapper.xml

&lt;mapper namespace=&quot;java.packs.SomethingMapper&quot;&gt;
&lt;select id=&quot;approvePO&quot; parameterType=&quot;Map&quot; statementType=&quot;PREPARED&quot; resultType=&quot;Integer&quot;&gt;
        begin
            #{oReturn,jdbcType=INTEGER,mode=OUT} := case when pack_name.func_name(
            #{I_po_num,jdbcType=INTEGER,mode=IN},
            #{I_pgm_id,jdbcType=INTEGER,mode=IN},
            #{O_err_msg,jdbcType=VARCHAR,mode=OUT},
            #{I_user,jdbcType=VARCHAR,mode=IN}
            ) then 1
            else 0
            end;
        end;
&lt;/select&gt;

where the method is declared as void approvePO(final Map&lt;String, Object&gt; map); but got this error:

### The error occurred while setting parameters
### SQL: begin                 ? := case when pack_name.func_name(                 ?,                 ?,                 ?,                 ?                 ) then 1                 else 0                 end;             end;
### Cause: java.sql.SQLException: Missing IN or OUT parameter at index:: 1

and here's the input map debbuged:

如何在 Java 整数上使用 MyBatis 封装布尔 Oracle 函数?

but i cannot understand what i should change to make this work

答案1

得分: 0

我能够使用这个映射器来运行我的布尔函数:

<select id="approvePO" parameterType="Map" statementType="CALLABLE" resultType="Integer">
    { call begin
            #{oReturn,jdbcType=INTEGER,mode=OUT} := case when pack_name.func_name(
            #{I_po_num,jdbcType=INTEGER,mode=IN},
            #{I_pgm_id,jdbcType=INTEGER,mode=IN},
            #{O_err_msg,jdbcType=VARCHAR,mode=OUT},
            #{I_user,jdbcType=VARCHAR,mode=IN}
            ) then 1
            else 0
            end;
        end
    }
</select>

将 statementType 更改为 callable,resultType 更改为 integer,并以 { call begin 开始。

英文:

i was able to run my boolean function with this mapper:

    &lt;select id=&quot;approvePO&quot; parameterType=&quot;Map&quot; statementType=&quot;CALLABLE&quot; resultType=&quot;Integer&quot;&gt;
        { call begin
                #{oReturn,jdbcType=INTEGER,mode=OUT} := case when pack_name.func_name(
                #{I_po_num,jdbcType=INTEGER,mode=IN},
                #{I_pgm_id,jdbcType=INTEGER,mode=IN},
                #{O_err_msg,jdbcType=VARCHAR,mode=OUT},
                #{I_user,jdbcType=VARCHAR,mode=IN}
                ) then 1
                else 0
                end;
            end
        }
    &lt;/select&gt;

changed statementType to callable, resultType to integer and started with { call begin

huangapple
  • 本文由 发表于 2023年5月24日 23:00:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/76324917.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定