1. 程式人生 > >Mybatis的insert into select命令未結束問題解決

Mybatis的insert into select命令未結束問題解決

Mybatis中使用insert into select命令,錯誤如下:

Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: 
### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正確結束

### The error may involve cn.hna.fiber.billing.common.dao.FbPayBalanceMapper.presentBalance-Inline
### The error occurred while setting parameters
### SQL: insert into FB_PAY_BALANCE      (BALANCE_ID, PAY_ID, BALANCE_TYPE_ID, BALANCE, REAL_BALANCE, USED_BALANCE, EFF_DATE, EXP_DATE)  (  select seq_balance_id.nextval,a.pay_id,?,?, ?, ?,   ?, ?  from fb_user_info a  )
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正確結束

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正確結束

        at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:91)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
        at $Proxy19.insert(Unknown Source)
        at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
        at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57)
        at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
        at $Proxy21.presentBalance(Unknown Source)
        at cn.hna.fiber.billing.utils.service.impl.PresentBalanceImpl.present(PresentBalanceImpl.java:62)
        at cn.hna.fiber.billing.utils.PresentBalanceMain.main(PresentBalanceMain.java:24)
原先的配置:
<insert id="presentBalance" parameterType="******">
    insert into FB_PAY_BALANCE 
    (BALANCE_ID, PAY_ID, BALANCE_TYPE_ID, BALANCE, REAL_BALANCE, USED_BALANCE, EFF_DATE, EXP_DATE)
	(
	select SEQ_BALANCE_ID.nextval,a.pay_id,#{balanceTypeId},#{balance}, #{realBalance}, #{usedBalance}, 
	#{effDate}, #{expDate}
	from fb_user_info a
	)
  </insert>
修改配置後,問題解決。
<insert id="presentBalance" parameterType="cn.hna.fiber.billing.common.pojo.FbPayBalance" useGeneratedKeys="false" >
    insert into FB_PAY_BALANCE 
    (BALANCE_ID, PAY_ID, BALANCE_TYPE_ID, BALANCE, REAL_BALANCE, USED_BALANCE, EFF_DATE, EXP_DATE)
	(
	select SEQ_BALANCE_ID.nextval,a.pay_id,#{balanceTypeId},#{balance}, #{realBalance}, #{usedBalance}, 
	#{effDate}, #{expDate}
	from fb_user_info a
	)
  </insert>