表达式类型错误oracle,解决mybatis报”BadSqlGrammarException..SQLSyntaxErrorException: ORA-01790: 表达式必须具有与对应表达式相同…

  • Post author:
  • Post category:其他


一、前言

关于使用mybatis报”org.springframework.jdbc.BadSqlGrammarException: ### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-01790: 表达式必须具有与对应表达式相同的数据类型”错误异常,详情日志如下

二、解决方法

1.原因分析 – 对于数据库SUMA、SUMB、SUMC属性数据类型NUMBER(20)对于mybatis配置应改为jdbcType=INTEGER,另外CREATED_DATE、UPDATED_DATE数据类型时间戳对于改为systimestamp类型<?xml  version=”1.0″ encoding=”UTF-8″ ?>  @b@mapper   @b@  PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”   @b@  “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>@b@ @b@@b@@b@@b@INSERT INTO  PMS_NEWINFO_INFO@b@(ID,@b@FOLDER_NAME,@b@WEB_SITE_ID,@b@FOLDER_NAME,@b@TITLE,@b@CONTENTBODY, @b@SUMA,@b@SUMB,@b@SUMC,  @b@CREATED_BY,@b@CREATED_DATE,@b@UPDATED_BY,@b@UPDATED_DATE,@b@DATA_STATUS)@b@@b@select@b@sys_guid(),@b@#{newinfo.folderName,jdbcType=VARCHAR},@b@#{newinfo.webSiteId,jdbcType=VARCHAR},@b@#{newinfo.title,jdbcType=VARCHAR},@b@#{newinfo.contentBody,jdbcType=VARCHAR}, @b@#{newinfo.daySuma,jdbcType=VARCHAR},@b@#{newinfo.daySumb,jdbcType=VARCHAR},@b@#{newinfo.daySumc,jdbcType=VARCHAR},  @b@’sys’,@b@sysdate,@b@’sys’,@b@sysdate,@b@’1’@b@from dual@b@@b@@b@ @b@ @b@

2. 应该改配置如下<?xml  version=”1.0″ encoding=”UTF-8″ ?>  @b@mapper   @b@  PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”   @b@  “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>@b@ @b@@b@@b@@b@INSERT INTO  PMS_NEWINFO_INFO@b@(ID,@b@FOLDER_NAME,@b@WEB_SITE_ID,@b@FOLDER_NAME,@b@TITLE,@b@CONTENTBODY, @b@SUMA,@b@SUMB,@b@SUMC,  @b@CREATED_BY,@b@CREATED_DATE,@b@UPDATED_BY,@b@UPDATED_DATE,@b@DATA_STATUS)@b@@b@select@b@sys_guid(),@b@#{newinfo.folderName,jdbcType=VARCHAR},@b@#{newinfo.webSiteId,jdbcType=VARCHAR},@b@#{newinfo.title,jdbcType=VARCHAR},@b@#{newinfo.contentBody,jdbcType=VARCHAR}, @b@#{newinfo.daySuma,jdbcType=INTEGER},@b@#{newinfo.daySumb,jdbcType=INTEGER},@b@#{newinfo.daySumc,jdbcType=INTEGER},  @b@’sys’,@b@systimestamp,@b@’sys’,@b@systimestamp,@b@’1’@b@from dual@b@@b@@b@ @b@ @b@