1.2.3版本
@Test
public void testSqlPars() {
// 此sql可以正常执行
String sql ="SELECT B.CUSTOMER_ID customerId,B.CN_NAME NAME,OPENING_DATE,CLOSING_DATE,count(A.OPENING_DATE) over (partition BY B.CUSTOMER_ID ORDER BY trunc(A.OPENING_DATE,'mm') RANGE BETWEEN interval '3' month (4) preceding AND CURRENT ROW) AS createCount,count(A.CLOSING_DATE) over (partition BY B.CUSTOMER_ID ORDER BY trunc(NVL(A.CLOSING_DATE,SYSDATE),'mm') RANGE BETWEEN interval '3' month (4) preceding AND CURRENT ROW) AS cancelCount,row_number () over (partition BY B.CUSTOMER_ID ORDER BY trunc(A.OPENING_DATE) DESC) AS row_flg FROM account_info A,CUSTOMER_INFO B WHERE A.CUSTOMER_ID=B.CUSTOMER_ID";
SQLUtils.format(sql, DbType.oracle);
}
报错:
com.alibaba.druid.sql.parser.ParserException: syntax error, expect AND, actual IDENTIFIER pos 210, line 1, column 202, token IDENTIFIER preceding at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:3980) at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.parseAggregateExpr(OracleExprParser.java:866) at com.alibaba.druid.sql.parser.SQLExprParser.methodRest(SQLExprParser.java:1554) at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.methodRest(OracleExprParser.java:495) at com.alibaba.druid.sql.parser.SQLExprParser.parseSelectItem(SQLExprParser.java:5432) at com.alibaba.druid.sql.parser.SQLSelectParser.parseSelectList(SQLSelectParser.java:973)
原提问者GitHub用户neozo
看起来是在使用 Oracle 分析函数时出现了错误。这种错误通常是由于分析函数的语法和参数使用问题,或者存在其他语法和语义问题导致的。
为了解决这个问题,可以考虑以下几个方面:
检查分析函数的语法。在使用 Oracle 分析函数时,需要确保语法正确,遵循标准的分析函数语法规范和语法要求。可以参考 Oracle 官方文档或者其他相关资料,了解分析函数的语法和用法。
检查分析函数的参数使用。在使用分析函数时,需要确保正确使用参数,并且参数的类型和值符合要求。可以参考 Oracle 官方文档或者其他相关资料,了解分析函数的参数要求和使用方式。
检查分析函数的语义。在使用分析函数时,需要确保语义正确,并且符合实际需求。可以使用 SQL 分析工具或者其他工具来分析分析函数的语义和执行计划,以确定是否存在语义错误或者性能问题。
尝试其他的 SQL 函数。如果分析函数无法满足需求,可以尝试其他的 SQL 函数,例如聚合函数、标量函数、连接函数等。这些函数可以更好地支持各种 SQL 操作和语义。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.5
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。