zoukankan      html  css  js  c++  java
  • ORA-00907: 缺失右括号(通用解决办法)

    PL/SQL 的SQL语句可以执行,但是放在hibernate中,后台打印,出现了错误。

    错误的SQL解析:黄色为错误部分

    Hibernate: 

        select

            examinee0_.EXAM_YEAR as col_0_0_,

            count(*) as col_1_0_,

            sum(caseexaminee0_.CHECK_FLAGwhen'2'then1else 0end) as col_2_0_

         from

            vet_test.EXAMINEE examinee0_ 

        group by

            examinee0_.EXAM_YEAR 

        order by

            examinee0_.EXAM_YEAR ASC

    很明显 ,标黄的地方出错,空格不翼而飞,后台提示ORA-00907: 缺失右括号

    经过一番检查!终于发现了问题所在:那就是hibernate的SQL查询翻译器

    Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,     
         在hibernate的配置文件中,hibernate.query.factory_class     
         属性用来选择查询翻译器。     
         (1)选择Hibernate3.0的查询翻译器:     
         hibernate.query.factory_class=     
         org.hibernate.hql.ast.ASTQueryTranslatorFactory     
         (2)选择Hibernate2.1的查询翻译器hibernate.query.factory_class=     
         org.hibernate.hql.classic.ClassicQueryTranslatorFactory

    解决方案:

    将hibernate.cfg.xml的

    <property name="hibernate.query.factory_class">

     org.hibernate.hql.classic.ClassicQueryTranslatorFactory

    </property>

    标蓝色的部分替换成org.hibernate.hql.ast.ASTQueryTranslatorFactory

    替换后后台打印解析后的sql:黄色为解析正确后的sql

    Hibernate: 

        select

            examinee0_.EXAM_YEAR as col_0_0_,

            count(*) as col_1_0_,

            sum(case examinee0_.CHECK_FLAG 

                when '2' then 1 

                else 0 

            end) as col_2_0_ 

        from

            vet_test.EXAMINEE examinee0_ 

        group by

            examinee0_.EXAM_YEAR 

        order by

            examinee0_.EXAM_YEAR ASC

  • 相关阅读:
    Anaconda 安装及包管理工具 conda 进行虚拟环境包管理的基本操作
    终端分屏复用工具 tmux 基本操作教程
    在远程登陆的Ubuntu服务器上通过命令行源码编译安装 GNU M4、autoconf、automake 等程序
    Ubuntu18.04 使用过程遇到的问题记录
    缓冲区溢出基础实践(二)——ROP 与 hijack GOT
    vue.js 使用记录(1)
    fis3 安装(Linux)
    js常用共同方法
    ajax跨域 自定义header问题总结
    服务器配置记录
  • 原文地址:https://www.cnblogs.com/klslb/p/6957377.html
Copyright © 2011-2022 走看看