回答

收藏

获取Oracle中所有表的列表?

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

如何查询Oracle数据库以显示其中所有表的名称?
% k+ I. f9 M  |- H. D$ G               
, q$ Z1 L' Q8 f* s# f解决方案:
) G+ [1 c* T3 U8 J# j* U3 V; I               
( v' _& P' F* ]/ d% X6 s4 d0 x0 M/ C# E  \9 T8 {

5 m5 \+ {0 W9 h6 d1 r7 e                SELECT owner, table_name* v; T& r6 r: Y( [
  FROM dba_tables4 s( Q9 ?4 D  \1 U0 o
假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT
3 V/ l/ [/ w$ B& A8 [& x# {+ c" XANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表)8 S$ H# I* b5 |+ B
)。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模式可能包含您可能不在乎的大量Oracle表。
# D, A! S8 {7 \5 L, Q$ `8 G: S或者,如果您无权访问DBA_TABLES,则可以通过ALL_TABLES视图查看您的帐户有权访问的所有表:1 f, a, Q8 H; ~$ C1 c% ]
SELECT owner, table_name/ W. N& u' x) O6 W+ B0 @* K
  FROM all_tables
( u! Q& Y9 P# C/ U* L3 n9 M虽然,这可能是数据库中可用表的子集(ALL_TABLES向您显示已授予用户访问权限的所有表的信息)。
0 ^3 [4 l1 s2 r5 B如果您只关心自己拥有的表,而不关心自己有权访问的表,则可以使用USER_TABLES:
) e6 Q3 r) i4 M1 bSELECT table_name
; I$ P7 T- ^7 Y2 g) M  FROM user_tables
4 Y  t- q8 O7 z0 V由于USER_TABLES仅具有有关您拥有的表的信息,因此它没有一OWNER列-根据定义,所有者是您。; m$ j: N& q0 Q5 Y& j+ H0 z
甲骨文也有一些遗留的数据字典views– TAB,DICT,TABS,并CAT为example–1 O- {. l; Z$ w* G$ A) Y9 L9 E7 G
可能被使用。通常,除非绝对需要将脚本反向移植到Oracle
* ]* J- `( C& D. B+ q& F6,否则我建议不要使用这些旧视图。Oracle很长时间以来都没有更改这些视图,因此它们经常在使用较新类型的对象时遇到问题。例如,TAB和CAT视图均显示有关用户回收站中表的信息,而[DBA|ALL|USER]_TABLES视图均将其过滤掉。" U; K+ i, m- T) N" |
CAT还显示带有TABLE_TYPE“ TABLE”的物化视图日志的信息,这不太可能是您真正想要的。
/ z& O. u! R- ^DICT结合了表格和同义词,并且不会告诉您对象的所有者。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则