Java Mybatis ORA-00911:无效字符

Java Mybatis ORA-00911:无效字符,java,oracle,mybatis,Java,Oracle,Mybatis,错误消息如下所示 该错误可能存在于mappers/admin-mapper.xml中 该错误可能涉及defaultParameterMap 设置参数时出错 原因:java.sql.SQLSyntaxErrorException:ORA-00911:无效字符;错误的SQL语法[];嵌套异常是java.sql.SQLSyntaxErrorException:ORA-00911:无效字符]和根本原因 java.sql.SQLSyntaxErrorException:ORA-00911:无效字符

错误消息如下所示

该错误可能存在于mappers/admin-mapper.xml中
该错误可能涉及defaultParameterMap
设置参数时出错
原因:java.sql.SQLSyntaxErrorException:ORA-00911:无效字符;错误的SQL语法[];嵌套异常是java.sql.SQLSyntaxErrorException:ORA-00911:无效字符]和根本原因 java.sql.SQLSyntaxErrorException:ORA-00911:无效字符

    <select id="selectCouponByDate" parameterType="String" resultType="Coupon">
    CREATE OR REPLACE VIEW CPN_EXPIRED
    AS SELECT COUNT(COUPON_NAME) AS EXPIRED, COUPON_NAME
         FROM COUPON
        WHERE EXPDATE <![CDATA[<]]> SYSDATE
          AND ISUSED = 'N'
     GROUP BY COUPON_NAME;

    CREATE OR REPLACE VIEW CPN_USED
    AS SELECT COUNT(COUPON_NAME) AS USED, COUPON_NAME
         FROM COUPON
        WHERE ISUSED = 'Y'
     GROUP BY COUPON_NAME;
     
       SELECT C.COUPON_NAME
            , ISSUEDBY
            , LIMIT
            , COUNT(C.COUPON_NAME) AS ISSUED, EXPIRED, USED
         FROM COUPON C
    LEFT JOIN CPN_EXPIRED V1 ON(C.COUPON_NAME = V1.COUPON_NAME)
    LEFT JOIN CPN_USED V2 ON(C.COUPON_NAME = V2.COUPON_NAME)
    <choose>
        <when test="date == day">WHERE TO_DATE(SYSDATE,'yy-mm-dd') - TO_DATE(ISSUEDATE, 'yy-mm-dd') = 0</when>
        <when test="date == week">WHERE ISSUEDATE <![CDATA[>=]]> TRUNC(SYSDATE, 'IW')
                                  AND ISSUEDATE <![CDATA[<]]> TRUNC(SYSDATE, 'IW') + 7</when>
        <otherwise>WHERE ISSUEDATE <![CDATA[>=]]> TRUNC(SYSDATE, 'MM')
                   AND ISSUEDATE <![CDATA[<]]> LAST_DAY(SYSDATE)</otherwise>
    </choose>
     GROUP BY C.COUPON_NAME, ISSUEDBY, LIMIT, EXPIRED, USED;
</select>

创建或替换视图CPN_已过期
选择计数(优惠券名称)作为过期,优惠券名称
从优惠券
其中EXPDATE SYSDATE
和ISUSED='N'
按优惠券名称分组;
创建或替换已使用的视图CPN_
作为使用的选择计数(优惠券名称),优惠券名称
从优惠券
其中ISUSED='Y'
按优惠券名称分组;
选择C.U名称
,由
,极限
,已发行、过期、已使用的数量(C.优惠券名称)
从优惠券C
左连接CPN\u已过期V1 ON(C.COUPON\u NAME=V1.COUPON\u NAME)
左连接CPN\u已在上使用V2(C.COUPON\u NAME=V2.COUPON\u NAME)
其中截止日期(SYSDATE,'yy-mm-dd')-截止日期(ISSUEDATE,'yy-mm-dd')=0
其中ISSUEDATE=]>TRUNC(SYSDATE,“IW”)
并发布日期TRUNC(系统日期,'IW')+7
其中ISSUEDATE=]>TRUNC(SYSDATE,“MM”)
并于最后一天发布(系统日期)
按C.息票名称、发行人、限额、过期、使用分组;

我找不到任何打字错误。

删除
在末尾您是指每个分号还是最后的分号?Oracle不支持通过JDBC在一次
execute()
调用中发送多条语句。因此,除非MyBatis将其拆分为不同的语句,否则您需要手动拆分,然后删除每个
只是一张便条。您可以使用
而不是
。而且。。。根本不需要逃出<代码> >代码>。您也可以考虑“代码>创建视图< /代码>作为安装的一部分,一旦完成,将它们从映射器中删除。没有理由在每次查询之前重新创建视图-这也将解决问题。