我想知道如何将if语句放入插入SQL查询中。我只想插入两个参数(CODRIC和PROGRIC),如果它们不为null。我写这样的东西
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语句...有人可以向我解释为什么?
谢谢你
答案 0 :(得分:2)
错误消息说明了一切。值的数量与要插入的列数不匹配。
您还需要将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 ...
)