回答

收藏

获取Oracle中所有表的列表?

技术问答 技术问答 95 人阅读 | 0 人回复 | 2023-09-13

如何查询Oracle数据库以显示其中所有表的名称?
% B- G" z: c9 C3 s  S                : m4 }2 p8 _9 M. o
解决方案:1 I8 ]/ P0 \/ ]
                0 J7 a7 v( n& b/ J, ?
/ r: J/ a1 \& I" S6 M. \& f; A" a

* n. \1 X# j) e1 a- o                SELECT owner, table_name& i% V+ V& G& J2 C6 E+ l; s: a% d
  FROM dba_tables; J: _8 ~# _6 f+ E
假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT
) Z4 u; z8 t- X! r5 b6 DANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表)
' F. ]) [, l+ d)。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模式可能包含您可能不在乎的大量Oracle表。% |! q! O, w* V+ k/ e
或者,如果您无权访问DBA_TABLES,则可以通过ALL_TABLES视图查看您的帐户有权访问的所有表:
( I( c! U( u4 ^2 R' aSELECT owner, table_name/ c7 M9 `+ }# m! x
  FROM all_tables0 _/ G& x7 O' Q0 I. O. ^* w; m
虽然,这可能是数据库中可用表的子集(ALL_TABLES向您显示已授予用户访问权限的所有表的信息)。! d7 D, ~" i& w! Q% `3 `6 T7 u& t9 y- U
如果您只关心自己拥有的表,而不关心自己有权访问的表,则可以使用USER_TABLES:! W, j0 l$ i7 Q* j. o
SELECT table_name
6 Q; W9 u/ z3 X5 z. h2 p* E  FROM user_tables
3 A8 x. M3 t( Q6 {8 K由于USER_TABLES仅具有有关您拥有的表的信息,因此它没有一OWNER列-根据定义,所有者是您。, y" J% e/ W" O7 {: A2 k1 w" `/ p
甲骨文也有一些遗留的数据字典views– TAB,DICT,TABS,并CAT为example–
9 @! P8 u: k: H5 E: J4 I5 w可能被使用。通常,除非绝对需要将脚本反向移植到Oracle
6 K# x+ d* q% n8 {8 w7 w* l2 [& q6,否则我建议不要使用这些旧视图。Oracle很长时间以来都没有更改这些视图,因此它们经常在使用较新类型的对象时遇到问题。例如,TAB和CAT视图均显示有关用户回收站中表的信息,而[DBA|ALL|USER]_TABLES视图均将其过滤掉。; g2 t1 b! O' r8 Q9 l+ l5 i2 _
CAT还显示带有TABLE_TYPE“ TABLE”的物化视图日志的信息,这不太可能是您真正想要的。6 z& v7 F/ g% `* G: c! e' f
DICT结合了表格和同义词,并且不会告诉您对象的所有者。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则