开发者社区> 问答> 正文

求助,ORA-00933: SQL 命令未正确结束??报错

这是控制台的报错信息 ### The error may involve com.vip.mapper.boss.BossnavattrMapper.createNavAttr_SyncForBatch-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO BossNavAttr_SYNC(ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE)    select ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE    from BossNavAttr WHERE MAPID = ? and navid in (249263)

### Cause: java.sql.SQLException: ORA-00933: SQL 命令未正确结束

======================================

完整的语句:

INSERT INTO  BossNavAttr_SYNC(ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE) 
select ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE 
from  BossNavAttr  WHERE MAPID = -1 and navid in (249178) 


===========================================
XML里面配置信息是这样:
<insert id="createNavAttr_SyncForBatch" parameterType="Object">

INSERT INTO  BossNavAttr_SYNC (ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE) 
select ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE 
from  BossNavAttr  WHERE MAPID = #{mapid} and ${srcString}

</insert>

使用的是MyBatis+SpringMVC,数据库是ORACLE 10g,两张表名字分别是BossNavAttr_SYNC和BossNavAttr,这两张表的字段个数以及字段数据类型都是一样,我想在添加BossNavAttr_SYNC数据时,直接通过id查询BossNavAttr表,将查到的记录直接添加到BossNavAttr_SYNC表,这个SQL语句我在PL/SQL里面能够正常添加,而且查询也有数据,但是在Java里面就一直报错,请问是什么原因啊?

展开
收起
爱吃鱼的程序员 2020-06-22 19:18:41 592 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    这是什么:

    and ${srcString}  

    引用来自“Hunts”的答案

    这是什么:

    and ${srcString}  

    INSERTINTOBossNavAttr_SYNC(ATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTE)selectATTRID,NAVID,ATTRALTNAME,ATTRPROPERTY,PARENTATTRID,ORDERFLAG,FULLPATH,FULLNAME,PARENTOPTIONID,MAPID,REDOPTION,ATTRNOTEfromBossNavAttrWHEREMAPID=?andnavidin(249263)这句话本身应该是没有问题的,你看看?里面的变量是什么吧 回复 @StormFour:。。。这是mybatis的xml内。。回复 @sxgkwei:和你说的sql对应不上你红框框住的位置有什么错?

    写法有问题。

    直接嵌入SQL语句类的,应该在where后面第一个位置写,这样可以保证没有此SQL时,where标签会自动格式化掉where后的第一个and关键字。此sql使用者在不知情情况下,可能在条件前面加一个and关键词,此时也正确;如果不加也正确;但如果此嵌入式SQL在其它位置,就要求调用者对XML配置有所了解,知道自己加入的条件是否前面已经配置了and关键字,否则极有可能造成and关键字多余或不足的错误。此时,总体如果必须保证mapid的话,倒是不用再用标签包裹起来,总的,where部分应该这么些:

    <where>

    <iftest="srcString!=null">

    ${srcString}

    </if>

    andmapid=#{mapid}

    </where>

    2020-06-22 19:18:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载