暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle根据时间查询Interval partition分区内数据

IT技术佳肴 2018-11-20
887

内容简介



本文介绍了据时间查询Interval partition分区内数据的方法,包括查看分区信息,查看分区内数据,根据时间去查询分区名等。


特别是根据分区字段值查询Interval Partition分区的名字的方法,如果没有特殊的处理(即没有重命名),没有直接的函数或方法获取分区名字。本文除了提出一种常规处理方法,还从MOS上寻找到另外两种处理思路,这里做出分享。


文中的内容基于一个已经创建的分区表进行测试,测试所用的表为BP_VOUCHER_HISTORY表,以月作为分区,系统自动命名分区。


查看分区信息




注:查询dba_tab_partitions | all_tab_partitions | user_tab_partitions表都可以


查看分区内数据(以SYS_P82分区为例,分3种情况)



1)如果知道分区的名字,可以直接查询对应的分区名

2)如果不知道分区的名字,但是知道分区主键的字段值范围,可以基于分区范围进行查询

(3)如果不知道分区的名字,也不知道分区主键的字段值范围,可以使用PARTITION FOR子句进行查询,比如现在只知道2017-01-15是这个分区的数据

注:PARTITION FOR子句可以用于指定分区,而不使用分区的名字。


根据分区内的分区字段值,查询Interval Partition分区名



因为Oracle并没有提供直接的方法用于指定某个日期属于哪个分区,所以这里要借助于dba_tab_partitionshigh_value


但是这里又有一个问题,high_valueLong类型的,不能使用to_date或者to_char函数直接进行转化。

 

所以,要解决根据分区字段值查询分区的问题,本文的解决方案是把Oracle数据库的Long类型转化为varchar2类型或者date类型,然后进行比对,查找出分区的名字。

同理,对于使用数字进行自动分区的情况,也可以通过类似的方法进行处理。


参考资料



MOS上找到的用于将high_value转化为varvhar2类型的方法,在这里进行分享,感兴趣的读者可以发到电脑上查阅。


Partition HIGH_VALUE Wrong When NLS_CALENDAR Not GREGORIAN (文档 ID 1964566.1)


How To Select Specific Interval Partition With Sysdate? (文档 ID 2325059.1)



文章转载自IT技术佳肴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论