开发者社区 > 数据库 > 数据仓库 > 正文

云数据仓库ADB中这个是不支持批量执行sql吗?还是说有什么配置?

云数据仓库ADB中java.sql.BatchUpdateException: [13000, 2023071916281119216806321403453003052] multi-statement be found.
这个是不支持批量执行sql吗?还是说有什么配置?

展开
收起
十一0204 2023-07-23 22:48:41 213 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    这个错误提示无法执行批量SQL语句,是因为默认情况下,ADB不支持批量SQL语句。

    错误信息如下:

    Copy
    java.sql.BatchUpdateException: [13000, 2023071916281119216806321403453003052] multi-statement be found。
    其中[13000]是MySQL错误码,表示"不支持多语句"

    ADB不允许在单条SQL语句中执行多条语句,所以默认不支持执行批量SQL语句。

    解决方案有两种:

    单条执行多条SQL语句
    将批量SQL语句拆分为多个单条SQL语句,然后分别执行。

    java
    Copy
    for (String sql : sqlList) {
    statement.execute(sql);
    }
    这是正确的方式,可以避免这个报错。

    启用多语句执行功能(需要DBA操作)
    DBA可以通过修改ADB配置,开启multiStatementSupport参数。

    Copy
    ALTER RESOURCE GROUP resourceGroupName SET ('multiStatementSupport' = 'true');
    然后重新连接数据库后,就可以执行批量SQL语句了。

    java
    Copy
    statement.addBatch(sql1);
    statement.addBatch(sql2);
    ...
    statement.executeBatch();
    总的来说,ADB默认不支持批量SQL语句。

    要执行批量SQL,有两种方式:

    单条执行多条SQL语句
    启用multiStatementSupport配置,开启多语句执行支持

    2023-07-27 19:12:19
    赞同 展开评论 打赏
  • 意中人就是我呀!

    创建一个anoe吧 。此回答整理至钉群“云数据仓库ADB-开发者群”

    2023-07-26 11:03:43
    赞同 展开评论 打赏
  • 对于您的查询需求,可以考虑使用连接子查询(subquery)来实现类似的功能。以下是一个使用连接子查询的示例查询:

    SELECT 
        t1.owner_company_id,
        t1.owner_company_name,
        (
            SELECT GROUP_CONCAT(t2.owner_dept_id SEPARATOR ',')
            FROM dws_bid_all_order_info_da t2
            WHERE t2.owner_company_id = t1.owner_company_id
        ) AS owner_dept_ids,
        (
            SELECT GROUP_CONCAT(t2.owner_dept_name SEPARATOR ',')
            FROM dws_bid_all_order_info_da t2
            WHERE t2.owner_company_id = t1.owner_company_id
        ) AS owner_dept_names,
        COUNT(*) AS order_num,
        SUM(t1.budget / 100 / 10000) AS total_budget
    FROM dws_bid_all_order_info_da t1
    WHERE t1.order_type IN ('招标', '询比')
        AND t1.status_name != '已流标'
        AND (t1.owner_company_id IN (5, 27, 14) OR t1.owner_dept_id IN (12, 62, 10, 15, 79, 7))
    GROUP BY 
        t1.owner_company_id,
        t1.owner_company_name;
    

    上述查询使用了两个连接子查询,分别用于将 owner_dept_idowner_dept_name 进行组合成字符串,并以逗号分隔。这样可以达到将数组转换为字符串并进行连接的效果。

    2023-07-25 18:50:31
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关产品

  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 相关电子书

    更多
    基于阿里云MaxCompute 构建企业云数据仓库CDW的最佳实践建议 立即下载
    PostgresChina2018_陶征霖_新一代数据仓库OushuDB架构剖析 立即下载
    MaxCompute数据仓库数据转换实践 立即下载