回答

收藏

获取Oracle中所有表的列表?

技术问答 技术问答 239 人阅读 | 0 人回复 | 2023-09-14

获取Oracle中所有表的列表?% e( b2 [7 u6 i
                / `4 Q( n: p: l( S. @" x0 p
解决方案:
) ?, p6 {: G, K$ I" d               
8 }* w1 N0 c' D  w7 ^- B: t8 z$ H# s5 M4 y9 D: A8 x
1 J2 F2 p0 K% I: j% ~* |
                SELECT owner, table_name# L) v( @' c( C1 V
  FROM dba_tables  V$ q' r8 _7 |) R( l! J2 g8 H
) B+ A' u$ H; k0 A
假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT ANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表) )。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模式可能包含您可能不在乎的大量Oracle表。
0 r, N/ I6 z7 `" A) Q或者,如果您无权访问DBA_TABLES,则可以通过ALL_TABLES视图查看您的帐户有权访问的所有表:0 U7 ^5 H/ x1 W9 f. F( J
SELECT owner, table_name7 P- B# R" n. O
  FROM all_tables+ r) ]' ?. ]2 S) \) M: P5 k, u5 t
1 F$ r. t. J, D1 H( [% _
虽然,这可能是数据库中可用表的子集(ALL_TABLES向您显示已授予用户访问权限的所有表的信息)。
3 m# Q; G  G+ L: ]' M5 @: e2 P如果您只关心自己拥有的表,而不关心自己有权访问的表,则可以使用USER_TABLES:2 i) y  x% Z/ ^6 G5 n5 h: g
SELECT table_name, _4 H) q* v- Y" `5 w5 e. P6 W; k- E
  FROM user_tables
9 e$ ^- n0 u% b/ ]0 R1 O) Y8 N7 A1 v, g: T' m
由于USER_TABLES仅具有有关您拥有的表的信息,因此它没有一OWNER列–顾名思义,所有者是您。" f  J$ e1 |' c; D" p/ @
甲骨文也有一些遗留的数据字典views– TAB,DICT,TABS,并CAT为example–可能被使用。通常,除非绝对需要将脚本反向移植到Oracle 6,否则我建议不要使用这些旧式视图。Oracle很长时间以来都没有更改这些视图,因此它们经常在使用较新类型的对象时遇到问题。例如,TAB和CAT视图均显示有关用户回收站中表的信息,而[DBA|ALL|USER]_TABLES视图均将其过滤掉。 CAT还显示带有TABLE_TYPE“ TABLE”的物化视图日志的信息,这不太可能是您真正想要的。 DICT结合了表格和同义词,并且不会告诉您对象的所有者。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则