如何查询Oracle数据库以显示其中所有表的名称?
SELECT owner, table_name FROM dba_tables
假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT ANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表) )。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模式可能包含您可能不在乎的大量Oracle表。
DBA_TABLES
SELECT ANY DICTIONARY
SELECT_CATALOG_ROLE
SYS
SYSTEM
或者,如果您无权访问DBA_TABLES,则可以通过ALL_TABLES视图查看您的帐户有权访问的所有表:
ALL_TABLES
SELECT owner, table_name FROM all_tables
虽然,这可能是数据库中可用表的子集(ALL_TABLES向您显示已授予用户访问权限的所有表的信息)。
如果您只关心自己拥有的表,而不关心自己有权访问的表,则可以使用USER_TABLES:
USER_TABLES
SELECT table_name FROM user_tables
由于USER_TABLES仅具有有关您拥有的表的信息,因此它没有一OWNER列-根据定义,所有者是您。
OWNER
甲骨文也有一些遗留的数据字典views– TAB,DICT,TABS,并CAT为example– 可能被使用。通常,除非绝对需要将脚本反向移植到Oracle 6,否则我建议不要使用这些旧视图。Oracle很长时间以来都没有更改这些视图,因此它们经常在使用较新类型的对象时遇到问题。例如,TAB和CAT视图均显示有关用户回收站中表的信息,而[DBA|ALL|USER]_TABLES视图均将其过滤掉。 CAT还显示带有TABLE_TYPE“ TABLE”的物化视图日志的信息,这不太可能是您真正想要的。 DICT结合了表格和同义词,并且不会告诉您对象的所有者。
TAB
DICT
TABS
CAT
[DBA|ALL|USER]_TABLES
TABLE_TYPE