【发布时间】:2015-07-23 09:08:03
【问题描述】:
我正在尝试使用以下查询检索特定架构中的所有表:
SELECT OWNER || '.' || TABLE_NAME
from sys.all_tables
where secondary = 'N' and owner = 'TEST'
直到今天,当我意识到相同的查询在 11.2.0.3 和更高版本的 Oracle 之间的行为不同时,这个查询对我来说非常有效。从 Oracle 11.2.0.4 开始,相同的查询还返回一些额外的表,所有表都以名称 MDRT 开头。
我已经验证在 11.2.0.3 和 11.2.0.4 数据库中都存在类似的表(在 12c 上也注意到了)。稍微搜索一下这些表的内容,就会发现它们是由 Oracle 在创建空间索引时创建的。我查看了all_tables 的架构,看看我是否可以使用任何列来尝试排除这些额外的表,但没有成功。
最令人惊讶的是,我在 SO 或 Oracle 论坛上找不到任何讨论此问题的文章。这很烦人。
【问题讨论】:
-
您是在询问如何将它们从视图中排除,而不仅仅是从您的查询中排除(使用
and table_name not like 'MDRT%')? -
哦,不。我不想以任何方式修改数据。我只需要向连接的用户显示他在我的应用程序中拥有的所有表。我需要以某种方式隐藏这些额外的表格。我确实尝试过使用 not LIKE,它适用于我的测试数据,但其他一些数据库中的名称以 MDXT 而不是 MDRT 开头。我只是想在这里找到一个更通用的解决方案。当然,我必须回退到 MD%,否则没有其他办法。
-
不知道为什么会有索引表,或者索引会出现在这个视图中;但我没有合适的版本或任何空间背景可供参考。但是,这些也出现在
all_sdo_index_info中吗?如果是这样,您可以使用它来排除它们,也许。 -
是的,@AlexPoole,创建这些表是为了存储/管理用于空间索引的 R-tree 索引的节点级别。 SDO 空间索引的创建索引语法包括存储参数,但不包括物理表名(不幸的是)。而且,是的,这些都包含在 all_sdo_index_info(或 user_sdo_index_info)中。