繁体   English   中英

Oracle SQL使用变量分区名称

[英]Oracle SQL use variable partition name

我运行每日报告,该报告必须查询另一个单独更新的表。 由于源表中的记录量很大(每天8M +),因此每天都将数据存储在其自己的分区中。 该分区的标准格式为P ... 4 digit year ... 2 digit month ... 2 digit date ,因此昨天的分区是P20140907

目前,我使用此表达式,但每天必须手动更改分区的名称:

select * from <source_table> partition (P20140907) where ....

通过使用sysdatetoCharConcat我创建了另一个名为P_NAME2表,该表将自动生成并更新字符串值作为需要读取的分区的名称。 现在,我需要更新主查询,以便执行此操作:

select * from <source_table> partition (<string from P_NAME2>) where ....

你太辛苦了 Oracle已经为您完成了所有这些事情。 如果您使用正确的日期范围查询表,则oracle将仅在相关分区上执行该操作-这称为修剪

我建议阅读有关文档

如果您仍然持怀疑态度,请查询all_tab_partitions.HIGH_VALUE以使每个分区具有较高的价值(您创建的表...)。

我以为我会回头分享我最终如何解决这个问题。 源数据库习惯于跨分区泄漏日期,这就是为什么一天的查询不在单个分区内的原因。 我不能影响这一点,只是解决它...

begin    
execute immediate 
'create table LL_TEST as
select *
from SCHEMA.TABLE Partition(P'||TO_CHAR(sysdate,'YYYYMMDD')||')
where COLUMN_A=''Something''
and COLUMN_B=''Something Else''
';
end
;

使用PL / SQL脚本,我使用TO_CHAR(sysdate,'YYYYMMDD')创建分区名称,并将其余的查询串联起来。

请注意,您在where子句中搜索的值需要双撇号,因此要将'Something'发送到查询中,您需要在脚本中使用''Something''

它可能并不漂亮,但是可以在我必须使用的数据库上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM