Oracle查詢分割槽表的最後一個分割槽值

zhenghaishu發表於2014-08-12
Oracle查詢分割槽表的最後一個分割槽值

這是一個來自生產上的需求:資料庫中的分割槽表(幾十上百個)都是根據年份來分割槽的並且分割槽名稱和分割槽年份一一對應(比如p2011對應'2011'),客戶要求檢查分割槽表的分割槽是否已經過時。比如現在是2014年,若一個表的最大分割槽時間為2013年或2012年,則該表的分割槽已過時,需要考慮增加分割槽之類的對策。

為了簡化問題,這裡只建立三個表來分析。
第一個分割槽表:
create table p1
(
 id        VARCHAR2(10),
 name      VARCHAR2(20)
)
partition by range (id)
(
 partition p2011 values less than ('2011'),
 partition p2012 values less than ('2012'),
 partition p2013 values less than ('2013'),
 partition p2014 values less than ('2014')
);

Table created.

第二個分割槽表:
create table p2
(
 id        VARCHAR2(10),
 name      VARCHAR2(20)
)
partition by range (id)
(
 partition p2010 values less than ('2010'),
 partition p2011 values less than ('2011'),
 partition p2012 values less than ('2012'),
 partition p2013 values less than ('2013'),
 partition p2014 values less than ('2014')
);

Table created.

第三個分割槽表:
create table p3
(
 id        VARCHAR2(10),
 name      VARCHAR2(20)
)
partition by range (id)
(
 partition p2010 values less than ('2010'),
 partition p2011 values less than ('2011'),
 partition p2012 values less than ('2012')
);

Table created.

思路:不管每個表有多少個時間分割槽,最大的時間分割槽只能有一個,即最後那個。最後的那個時間值是最大的,可以考慮用函式max()。

select table_name, max(partition_name) as max_partition_name from user_tab_partitions group by table_name;

TABLE_NAME    MAX_PARTITION_NAME
--------------- --------------------
P1        P2014
P2        P2014
P3        P2012

如果想把high_value也顯示出來,則:
select t1.table_name, t1.max_partition_name, t2.high_value from
(select table_name, max(partition_name) as max_partition_name from user_tab_partitions group by table_name) t1,
(select table_name, partition_name, high_value from user_tab_partitions) t2
where t1.table_name = t2.table_name and t1.max_partition_name = t2.partition_name;

TABLE_NAME    MAX_PARTITION_NAME   HIGH_VALUE
--------------- -------------------- ---------------
P1        P2014             '2014'
P2        P2014             '2014'
P3        P2012             '2012'

從上述結果可以看出P3的資料有問題,分割槽只分到2012年。





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29485627/viewspace-1250172/,如需轉載,請註明出處,否則將追究法律責任。

相關文章