druid 1.0.16解析Oracle分页SQL语句时出现问题

纳米扣儿 发布于 2015/12/18 09:48
阅读 645
收藏 0

@wenshao 你好,想跟你请教个问题:

在使用StatViewServlet进行sql查看时,对于如下SQL语句,存在解析问题,请帮忙解决。我使用的druid版本为1.0.16。

SELECT * FROM(SELECT TEMP_TAB.*,ROW_NUMBER() OVER(ORDER BY NULL) AS IDX FROM (( select * from DPSAPP.T_TOP_FILE_SND_DTL where 1 = 1 ) TEMP_TAB )) TEMP_TAB_WITH_IDX WHERE TEMP_TAB_WITH_IDX.IDX > 0 AND TEMP_TAB_WITH_IDX.IDX <= 20

严重: Servlet.service() for servlet [DruidStatView] in context with path [/opv_app] threw exception [Filtered request failed.] with root cause
com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' 1 ) TEMP_TAB )) TEMP_TAB_WITH_IDX ',expect RPAREN, actual IDENTIFIER TEMP_TAB
	at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:231)
	at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:240)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.parseTableSource(OracleSelectParser.java:717)
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:314)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:272)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.select(OracleSelectParser.java:88)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.parseTableSource(OracleSelectParser.java:711)
	at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:314)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:272)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.select(OracleSelectParser.java:88)
	at com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser.parseStatementList(OracleStatementParser.java:163)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:145)
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:140)
	at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:384)
	at com.alibaba.druid.stat.DruidStatService.getSqlStat(DruidStatService.java:317)
	at com.alibaba.druid.stat.DruidStatService.service(DruidStatService.java:142)
	at com.alibaba.druid.support.http.StatViewServlet.process(StatViewServlet.java:162)

加载中
0
糊搞

SELECT * FROM(SELECT TEMP_TAB.*,ROW_NUMBER() { , } OVER(ORDER BY NULL) AS IDX FROM

大括号那里少个逗号。。。

纳米扣儿
纳米扣儿
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
0
糊搞

括号的数目也不对,,,

你找个SQL格式化工具格式化一下就知道少了哪些东东

0
糊搞
一个SQL被你写得什么都看不明白,也是个人才呀
纳米扣儿
纳米扣儿
回复 @糊搞 : 平常分布语法怎么写?druid支持语法开关如何使用?
糊搞
回复 @纳米扣儿 : 使用平常分布语法吧,这么写性能不见得高。另外,Druid里有很多支持语法的开关,你可以参照下。
纳米扣儿
纳米扣儿
SQL语句肯定正确,因为提交到数据库可以返回正确的执行结果。 之所以这么写,是因为我是做开发框架,这个sql语句是根据业务需要在原始sql语句基础上做加工实现自动分页。 虽然你的回答不太相关,但是还是感谢你的热心帮助。
返回顶部
顶部