sql - 我们如何分块执行 SQL Merge 查询?
问题描述
我有一个合并查询,它适用于少数记录(< 500)
Merge into TableA A using TableB B on (UNIQUEID = UNIQUEID)
when matched
then update
set
A.id = B.id,
when not matched
then insert (
A.id
)
values(
B.id
)
大型数据集 ( > 7000 ) 会出现此问题
错误:合并语句 ORA-30926:无法在源中获得一组稳定的行
我希望以块的形式执行合并语句(例如一次 1000 个),以便可以识别数据的确切问题。
解决方案
ORA-30926: 无法在源中获得一组稳定的行
此错误表示数据库无法将 中的一条记录与 中tableA
的一条记录匹配tableB
。这使得 MERGE 结果不可预测,Oracle 不喜欢不可预测的结果。
UNIQUEID 字段是 TableB 中的主键,因此不可能重复
所以你需要在tableA
. 这是一种方法:
select a.uniqueid
, count(*)
from tablea a
group by a.uniqueid having count(*) > 1
tableB
可能出于性能原因,或者验证它tableb.uniqueid
实际上与您认为的一样独特,您可能想要加入:
select a.uniqueid
, count(*)
from tablea a
join tableb b on b.uniqueid = a.uniqueid
group by a.uniqueid having count(*) > 1
推荐阅读
- typescript - 插件打字稿:@rollup/plugin-typescript TS2307:找不到模块“./App.svelte”或其相应的类型声明
- ios - 构建 XCode 时出现未定义符号错误
- c# - 如何使用实体框架进行连接表搜索?
- protocol-buffers - 在没有 pb 文件的情况下将 protobuf bin 转换为 JSON
- node.js - 尝试部署 Web 应用程序时,前端使用 create-react-app 而不是在 VPS 上正确安装 npm
- windows - Powershell命令等待一段时间
- angular7 - 在 ngx-datatable-column 中操作 moretext 和 lesstext
- c# - 使用存储过程时出现 ASP.Net Core 3.1 MVC 错误
- amazon-web-services - 如果我使用全局二级索引而不是本地二级索引,则 DynamoDB 数据返回排序
- r - R中为因子变量计算svymean的问题