Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

oracle解析within group报错 #5868

Closed
canglangX opened this issue Apr 24, 2024 · 3 comments
Closed

oracle解析within group报错 #5868

canglangX opened this issue Apr 24, 2024 · 3 comments

Comments

@canglangX
Copy link

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'',') WITHIN GROUP (ORDER BY pi.inst_name)
', expect BY, actual (, pos 798, line 24, column 51, token (
at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:863)
at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:871)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseGroupBy(SQLSelectParser.java:825)
at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:478)
at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:62)
at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:872)
at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:109)
at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:369)
at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:109)
at com.alibaba.druid.sql.parser.SQLExprParser.parseSelectItem(SQLExprParser.java:6369)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseSelectList(SQLSelectParser.java:1069)
at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:463)
at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:62)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSource(SQLSelectParser.java:1111)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:1102)
at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:474)
at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:62)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseSelect(SQLStatementParser.java:4469)
at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatement(SQLStatementParser.java:4857)

@canglangX
Copy link
Author

@lizongbo

@canglangX
Copy link
Author

测试sql : select listagg(name, ',') within group( order by name) as name from userinfo

@lizongbo
Copy link
Collaborator

lizongbo commented May 3, 2024

你自己反馈问题连版本号都不提供,而我验证了1.2.22是正常解析的。

看了git提交记录,listagg的语法在2017年就支持了。


  for (String sql : new String[]{
            "select listagg(name, ',') within group( order by name) as name from userinfo",
        }) {
            SQLStatementParser parser1 = SQLParserUtils.createSQLStatementParser(sql, DbType.oracle);
            List<SQLStatement> statementList1 = parser1.parseStatementList();
            System.out.println("原始的sql===" + sql);
            String sqleNew = statementList1.get(0).toString();
            System.out.println("生成的sql===" + sqleNew);
            SQLStatementParser parser2 = SQLParserUtils.createSQLStatementParser(sqleNew, DbType.oracle);
            List<SQLStatement> statementList2 = parser2.parseStatementList();
            String sqleNew2 = statementList2.get(0).toString();
            System.out.println("再次解析生成的sql===" + sqleNew);
            assertEquals(sqleNew, sqleNew2);


        }

@lizongbo lizongbo closed this as completed May 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants