oracle批量出入去重sql怎么写
时间: 2024-11-03 13:13:39 浏览: 6
Oracle批量执行传多个参数多个SQL文件
Oracle数据库中批量插入并去除重复数据(去重)可以使用ROW_NUMBER()窗口函数配合INSERT...SELECT语句。以下是一个基本的示例:
```sql
DECLARE
CURSOR c IS
SELECT column1, column2, ..., column_n,
ROW_NUMBER() OVER (PARTITION BY column1, column2, ... column_n ORDER BY id) as row_num
FROM your_table
WHERE condition_if_needed;
BEGIN
FOR rec IN c LOOP
INSERT INTO target_table(column1, column2, ...)
VALUES(rec.column1, rec.column2, ...)
ON DUPLICATE KEY UPDATE
column_to_update = rec.column_to_update;
END LOOP;
-- 如果你想一次性插入所有行,并删除原表中多余的行,可以考虑下面这种方法,注意备份数据以防误操作
DELETE y
FROM your_table y
LEFT JOIN (
SELECT column1, column2, ..., column_n, MIN(row_num) min_row_num
FROM your_table
GROUP BY column1, column2, ..., column_n
) x
ON y.column1 = x.column1 AND y.column2 = x.column2 AND ...
WHERE y.row_num > x.min_row_num;
END;
/
```
在这个例子中,你需要将`your_table`替换为源表名,`target_table`为目标表名,`column1, column2, ...`是你想要检查和去重的列。`condition_if_needed`用于指定哪些行需要插入。
请注意,如果你的数据量非常大,这种方法可能会消耗较多资源。此外,更新操作(ON DUPLICATE KEY UPDATE)取决于目标表是否有唯一索引或主键。如果目标表没有去重机制,直接删除原表中的多余记录则需谨慎,最好先备份数据。
阅读全文