【发布时间】:2013-06-30 00:04:56
【问题描述】:
我在 oracle 9 数据库中有一系列历史记录表。 History_table_00 包含上个月的数据,History_table_01 包含上个月的数据,History_table_02 包含上个月的数据。下个月,History_table_02 将自动重命名为 history_table_03,history_table_01 重命名为 history_table_02,history_table_00 重命名为 history_table_01,并且将创建一个新的 history_table_00 来收集最新的历史记录(我真的希望我说得通)。
无论如何,我需要编写一个选择语句来动态选择所有历史表。我希望这不会太复杂,因为它们都共享相同的名称,只是附加了序号,这样我就可以发现表名:
select table_name from all_tables where table_name like 'HISTORY_TABLE_%';
我对每个表的标准查询是:
select id, name, data_column_1, data_column_2 from history_table_%;
我必须做些什么来完成编写一个总是从所有历史表中选择而不需要我每个月都进入并添加新表的 sql 语句的目标?感谢你们提供的任何东西。
【问题讨论】:
-
这里正确的解决方案是只拥有一个表,并添加一个'Year'列作为主键的第一部分。
-
@Joel Coehoorn - 也许这是一个穷人的分区解决方案。你永远不知道。
-
@haki 在主键前添加年份将具有与大多数用例的单独表相似的性能特征
-
Joel,我同意绝对建议更改表命名和归档,但他最初的问题仍然很有趣。有时,当有人获得不是他们设计的数据库时,他们会遇到这种情况。请参阅我的回答,了解如何实现。
-
@JoelCoehoorn,我同意你的看法。我希望这只是我必须处理的一张桌子。但是,无论出于何种原因,这就是它的创建方式。不幸的是,我坚持下去了。
标签: sql oracle dynamic dynamic-sql