开发者社区> 问答> 正文

Druid SQL Parser:解析Oracle语句报错

Druid版本:

com.alibaba druid 1.2.4

下面是一条在本地环境运行正常的SQL:

SELECT * FROM "CUSTOM_LABEL" "cl" LEFT JOIN ( "CUSTOM_LABEL_BAK" "clb"
LEFT JOIN "DATA_SOURCE_INFO" "dsi" ON "clb"."CUSTOM_LABEL_VALUE" = "dsi"."REMARK" ) ON "cl"."ACCURACY_TYPE" = "clb"."CUSTOM_LABEL_NAME"

解析的代码:

SQLStatementParser statementParser = new OracleStatementParser(sql); SQLSelectStatement sqlStatement = (SQLSelectStatement)statementParser.parseStatement(); SQLSelect select = sqlStatement.getSelect();

出现的异常:

com.alibaba.druid.sql.parser.ParserException: TODO :pos 64, line 1, column 47, token LITERAL_ALIAS "CUSTOM_LABEL_BAK"

测试发现,如果将双引号全部去掉,能够正常解析;或者保留引号,调整联表顺序,去掉里面的括号,也可以解析。 但是,由于我们不能要求SQL的格式,只能保证SQL能够运行,所以希望能够支持这种类型的SQL

原提问者GitHub用户liu871009243

展开
收起
山海行 2023-07-05 18:10:50 308 0
3 条回答
写回答
取消 提交回答
  • PL/SQL中执行该语句:select XMLSERIALIZE(DOCUMENT EXTRACT(a.xml_cont, '/document') AS CLOB) AS xmlCont,a. from inpcase.hospital_record a where 1=1 and ipid = #{ipid}
    没有问题,
    在druid中报错:Cause: java.sql.SQLException: sql injection violation, dbType oracle, , druid-version 1.2.8, syntax error: syntax error, expect ), actual EXTRACT pos 37, line 1, column 31, token EXTRACT : select XMLSERIALIZE(DOCUMENT EXTRACT(a.xml_cont, '/document') AS CLOB) AS xmlCont,a.
    from inpcase.hospital_record a where 1=1 and ipid = ?

    2024-11-17 21:07:37
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    Druid SQL Parser 是阿里巴巴开源的 SQL 解析和语法分析工具,支持多种数据库类型,包括 Oracle 数据库。如果在使用 Druid SQL Parser 解析 Oracle 语句时出现错误,可能是由于以下原因之一:

    语法错误。在使用 Druid SQL Parser 解析 Oracle 语句时,需要确保语法正确,并遵循 Oracle 数据库的语法规范。可以使用 SQL 调试工具或者其他方式检查语法错误,并进行修正。

    版本不匹配。在使用 Druid SQL Parser 解析 Oracle 语句时,需要使用与 Oracle 数据库版本匹配的解析器。如果使用的解析器版本不匹配,可能无法解析语法或出现错误。

    配置错误。在使用 Druid SQL Parser 解析 Oracle 语句时,需要正确配置解析器的参数和选项。例如,需要指定解析器的数据库类型、字符集、保留字等。如果配置错误,可能会导致解析出错。

    如果您遇到 Druid SQL Parser 解析 Oracle 语句时出现错误的情况,可以尝试以下几个方面进行处理:

    检查语法错误。可以使用 SQL 调试工具或者其他方式检查语法错误,并进行修正。

    检查解析器版本。需要确保使用的解析器版本与 Oracle 数据库版本匹配。

    检查解析器配置。需要正确配置解析器的参数和选项,以确保解析器能够正确解析语法。

    2023-07-30 20:35:11
    赞同 展开评论 打赏
  • 问题已修复,请用新版本

    https://github.com/alibaba/druid/releases/tag/1.2.5

    原回答者GitHub用户wenshao

    2023-07-06 10:45:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像