使用分区的 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 更新查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle怎样查询哪些表分区?

Oracle SQL 更新查询需要几天时间才能更新

oracle 查询哪些表分区

oracle怎样查询哪些表分区?

如何更新oracle表中的分区字段

oracle分区表的使用和查询