mybatis 中的 if 语句插入查询
if-statement in mybatis insert query
我想知道如何将 if 语句放入插入 SQL 查询中。我只想插入两个参数(CODRIC 和 PROGRIC),前提是它们不为空。我写的是这样的
INSERT
INTO
${schema}.I9TB1000
(
I9TB1000_PROGR,
I9TB1000_DATARIF,
I9TB1000_STATO,
I9TB1000_STATOP,
I9TB1000_FUNZ,
I9TB1000_CODRIC,
I9TB1000_PROGRIC,
I9TB1000_INSMATR,
I9TB1000_INSTERM
)
VALUES(
NEXT VALUE FOR ${schema}.I9TB001S,
(SELECT
I9TB1000_DATARIF
FROM
${schema}.I9TB1000
WHERE
I9TB1000_PROGR =
(
SELECT
MAX (I9TB1000_PROGR)
FROM
${schema}.I9TB1000)),
( SELECT
COALESCE(I9TBFUNZ_STA_TO,#{i9TB1000_STATOP, jdbcType=INTEGER})
FROM
${defaultSchema}.I9TBFUNZ
WHERE
I9TBFUNZ_FUNZ = #{i9TB1000_FUNZ, jdbcType=INTEGER} ),
#{i9TB1000_STATOP, jdbcType=INTEGER},
#{i9TB1000_FUNZ, jdbcType=INTEGER},
<if test="i9TB1000_CODRIC != null">
#{i9TB1000_CODRIC, jdbcType=CHAR},
</if>
<if test="i9TB1000_PROGRIC != null">
#{i9TB1000_PROGRIC, jdbcType=INTEGER},
</if>
#{insMatr, jdbcType=CHAR},
#{insTerm, jdbcType=CHAR}
)
我接受错误 -117 分配的值的数量与指定或暗示的列的数量不同。似乎 mybatis 无法读取 if 语句......有人可以解释我为什么吗?
提前谢谢你
错误消息说明了一切。值的数量与要插入的列的数量不匹配。
您还需要将 if
添加到列列表中:
INSERT INTO table (
... other columns ...,
<if test="i9TB1000_CODRIC != null">
I9TB1000_CODRIC,
</if>
<if test="i9TB1000_PROGRIC != null">
I9TB1000_PROGRIC,
</if>
... other columns ...
) VALUES (
... values ...
)
我想知道如何将 if 语句放入插入 SQL 查询中。我只想插入两个参数(CODRIC 和 PROGRIC),前提是它们不为空。我写的是这样的
INSERT
INTO
${schema}.I9TB1000
(
I9TB1000_PROGR,
I9TB1000_DATARIF,
I9TB1000_STATO,
I9TB1000_STATOP,
I9TB1000_FUNZ,
I9TB1000_CODRIC,
I9TB1000_PROGRIC,
I9TB1000_INSMATR,
I9TB1000_INSTERM
)
VALUES(
NEXT VALUE FOR ${schema}.I9TB001S,
(SELECT
I9TB1000_DATARIF
FROM
${schema}.I9TB1000
WHERE
I9TB1000_PROGR =
(
SELECT
MAX (I9TB1000_PROGR)
FROM
${schema}.I9TB1000)),
( SELECT
COALESCE(I9TBFUNZ_STA_TO,#{i9TB1000_STATOP, jdbcType=INTEGER})
FROM
${defaultSchema}.I9TBFUNZ
WHERE
I9TBFUNZ_FUNZ = #{i9TB1000_FUNZ, jdbcType=INTEGER} ),
#{i9TB1000_STATOP, jdbcType=INTEGER},
#{i9TB1000_FUNZ, jdbcType=INTEGER},
<if test="i9TB1000_CODRIC != null">
#{i9TB1000_CODRIC, jdbcType=CHAR},
</if>
<if test="i9TB1000_PROGRIC != null">
#{i9TB1000_PROGRIC, jdbcType=INTEGER},
</if>
#{insMatr, jdbcType=CHAR},
#{insTerm, jdbcType=CHAR}
)
我接受错误 -117 分配的值的数量与指定或暗示的列的数量不同。似乎 mybatis 无法读取 if 语句......有人可以解释我为什么吗?
提前谢谢你
错误消息说明了一切。值的数量与要插入的列的数量不匹配。
您还需要将 if
添加到列列表中:
INSERT INTO table (
... other columns ...,
<if test="i9TB1000_CODRIC != null">
I9TB1000_CODRIC,
</if>
<if test="i9TB1000_PROGRIC != null">
I9TB1000_PROGRIC,
</if>
... other columns ...
) VALUES (
... values ...
)