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 ...
)