### Error updating database. Cause: java.sql.SQLException: ORA-00936: 缺失表达式

本文介绍了一个在使用MyBatis进行数据库插入操作时遇到的ORA-00936: 缺失表达式的错误,并给出了具体的解决办法。通过调整SQL语句中的字段值设置,成功解决了这一问题。

## Error updating database.  Cause: java.sql.SQLException: ORA-00936: 缺失表达式

### The error may involve org.haze.bpsms.balance.model.StatementReversal.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO BPSMS_SETT_REVE_ORDER    (ID,CUSTOMERID,TEMPLATEID,STATUSKEY,SETTLEMENTKEY,PRODUCTKEY,DOCDATE,DEPARTMENTID,USERID,STATEMENTID,DOCUMENTCODE  )   VALUES     (?,?,?,?,    ?,?,?,,?,    ?,?,?)
### Cause: java.sql.SQLException: ORA-00936: 缺失表达式

    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:154)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141)
    at org.haze.base.mybatis.BaseMyBatisDao$SqlSessionTemplate$1.doInSession(BaseMyBatisDao.java:146)
    at org.haze.base.mybatis.BaseMyBatisDao$SqlSessionTemplate.execute(BaseMyBatisDao.java:131)
    at org.haze.base.mybatis.BaseMyBatisDao$SqlSessionTemplate.insert(BaseMyBatisDao.java:144)
    at org.haze.base.dao.AbsDao.insert(AbsDao.java:94)
    at org.haze.base.service.AbsService.insert(AbsService.java:22)
    at org.haze.bpsms.balance.StatementReversalServiceTest.testInsert(StatementReversalServiceTest.java:55)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.sql.SQLException: ORA-00936: 缺失表达式

IDEA开发JAVA,inserttest过程中,出现以上错误:

解决办法:

ID,CUSTOMERID,TEMPLATEID,STATUSKEY,SETTLEMENTKEY,PRODUCTKEY,DOCDATE,DEPARTMENTID,USERID,STATEMENTID,DOCUMENTCODE  )   VALUES     (?,?,?,?,    ?,?,?,,?,    ?,?,?)删除DOCUMENTCODE后的空格

解决数据库更新报错 `### Error updating database. Cause: java.sql.SQLException: SQL String cannot be empty` 有以下方法: - 代码层面进行列表判空处理:当批量更新时,若涉及列表参数,可在代码层面对列表进行判空。例如使用 `CollectionUtils` 的 `isEmpty` 方法检查列表是否为空,避免传入空列表导致 MyBatis 无法生成动态 SQL 语句 [^1]。示例代码如下: ```java import org.springframework.util.CollectionUtils; import java.util.List; public class SomeService { public void updateBatch(List<SomeEntity> entityList) { if (!CollectionUtils.isEmpty(entityList)) { // 调用 MyBatis 的批量更新方法 } } } ``` - MyBatis 层面使用 `if` 标签判空:在 MyBatis 的 XML 文件中,使用 `if` 标签对列表参数进行判空处理。若列表为空,不执行相应的 SQL 逻辑,防止生成空的 SQL 语句 [^1]。示例代码如下: ```xml <update id="updateBatch" parameterType="java.util.List"> <if test="list != null and list.size() > 0"> <!-- 具体的 SQL 更新语句 --> </if> </update> ``` - 检查 `mapper.xml` 文件判断条件:查看 `mapper.xml` 文件,确保判断条件正确,避免因判断条件错误导致 SQL 语句无法生成。例如,检查 `<if>` 标签中的条件是否符合预期,避免出现判断写错的情况 [^3]。示例代码如下: ```xml <insert id="insertBatch" parameterType="java.util.List"> <if test="dbType == 'mysql' or dbType == 'db2'"> <!-- 正确的 SQL 插入语句 --> </if> <if test="dbType == 'oracle'"> <!-- 正确的 SQL 插入语句 --> </if> </insert> ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值