在 jOOQ 中解析带有 chr(10) 参数的 listagg 函数时出错

问题描述 投票:0回答:1

在 jOOQ 中尝试使用带有 chr(10) 参数的 listagg 函数作为分隔符时,解析器遇到错误,无法解析 SQL 查询。收到的错误消息是:

String literal expected [*] chr(10)
。此问题会阻止成功解析使用以换行符作为分隔符的 listagg 的 SQL 查询。

复制者:

public class ListaggReproducer {
    public static void main(String[] args) {
        // JDBC connection parameters
        String url = "jdbc:oracle:thin:@localhost:1521:XE";
        String username = "TEST";
        String password = "TEST";

        // SQL query with listagg and chr(10) delimiter
        String sql = "SELECT listagg(emp_name, chr(10)) WITHIN GROUP (ORDER BY column_name) AS result FROM employe";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             PreparedStatement pstmt = conn.prepareStatement(sql);
             ResultSet rs = pstmt.executeQuery()) {

            // Fetch and print the result
            while (rs.next()) {
                String result = rs.getString("result");
                System.out.println(result);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

预期行为: jOOQ 应该成功解析包含 listagg 函数并以 chr(10) 参数作为分隔符的 SQL 查询,从而正确生成和执行 SQL 语句。

实际行为: 源数据库方言是 Oracle,目标数据库方言是 PostgreSQL。 两个数据库都可以完美解析 chr(10) ,但 jOOQ 解析器无法识别它。

环境:

jOOQ版本:3.19.6
数据库方言:从 Oracle 到 PostgreSQL
jOOQ版本:开源

有关此事的任何指导或解决方案将不胜感激。谢谢你。

jooq
1个回答
0
投票

您可以在此处报告功能请求:https://github.com/jOOQ/jOOQ/issues/new/choose

作为解决方法,您可以使用正则表达式修补输入 SQL(例如将

chr(10)
替换为
'\n'
\n
是实际的换行符),或者使用
ParseListener
扩展解析器,这使得替换

© www.soinside.com 2019 - 2024. All rights reserved.