云数据仓库ADB中java.sql.BatchUpdateException: [13000, 2023071916281119216806321403453003052] multi-statement be found.
这个是不支持批量执行sql吗?还是说有什么配置?
这个错误提示无法执行批量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配置,开启多语句执行支持
对于您的查询需求,可以考虑使用连接子查询(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_id
和 owner_dept_name
进行组合成字符串,并以逗号分隔。这样可以达到将数组转换为字符串并进行连接的效果。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。