使用分区的 Oracle 更新查询
Posted
技术标签:
【中文标题】使用分区的 Oracle 更新查询【英文标题】:Oracle update query using partition 【发布时间】:2017-07-05 04:09:05 【问题描述】:我在 Oracle v.12 数据库中有以下示例数据
ID | NAME | DML_TYPE | FND_FILESEQNO | FND_FILERBA
---------------------------------------------------------
1 | name1a | insert | 1 | 1
1 | name1b | update | 1 | 2
2 | name2a | insert | 2 | 1
2 | name2b | update | 2 | 2
....
....
....
我希望发生以下 2 笔交易
delete old records (FND_FILESEQNO + FND_FILERBA) partition by 'ID' column
update latest record DML_TYPE = 'insert'
所以最终,如果我查询这个表,我应该得到以下结果......
ID | NAME | DML_TYPE | FND_FILESEQNO | FND_FILERBA
---------------------------------------------------------
1 | name1b | insert | 1 | 2
2 | name2b | insert | 2 | 2
非常感谢
【问题讨论】:
那么您是否想要一个程序同时执行这两项操作,或者您可以有两个单独的查询:第一个执行删除,第二个执行更新? 【参考方案1】:试试这个:-
MERGE INTO STACTOVER a
USING ( SELECT * FROM (
SELECT STACTOVER.*,Row_Number() OVER(PARTITION BY ID ORDER BY ID)rn
FROM STACTOVER)WHERE rn>1
)b
ON
(a.ID = b.ID)
WHEN MATCHED THEN
UPDATE SET a.dml_type = 'insert'
DELETE WHERE a.NAME != b.NAME ;
【讨论】:
以上是关于使用分区的 Oracle 更新查询的主要内容,如果未能解决你的问题,请参考以下文章