回答

收藏

如何在Oracle中通过SQL获取表注释?

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

我试过了 :
5 X+ P* H3 }  y5 z1 jselect * from user_tab_comments;
& n2 ]( k6 y- P7 z它返回了3列“ TABLE_NAME”,“ TABLE_TYPE”和“ COMMENTS”,但是“ TABLE_NAME”列就像“5 ]- U4 ]& B8 e5 B9 y! B5 v2 O
encrypted”一样,我需要明确的表名:9 U$ w3 O" }3 h$ M& ]# i) ^
TABLE_NAME                      TABLE_TYPE  COMMENTS  Y$ L2 }0 _. k- ]& _' b
BIN$IN1vjtqhTEKcWfn9PshHYg==$0  TABLE       R茅sultat d'int茅gration d'une photo num茅ris茅e
  a# E) h. `9 ?  @) \$ VBIN$PUwG3lb3QoazOc4QaC1sjw==$0  TABLE       Motif de fin d'agr茅ment de ma卯tre de stage: \" p# |4 a0 V$ g
我使用select * from user_tables;TABLE_NAME时未“加密”。6 F! N% @8 a1 U3 V; {/ h
               
' D1 K, D1 ]8 Q1 s& m6 _0 V' q解决方案:# w! Z" e) z3 p& Y; Y- U2 k
                5 V$ Q1 b: d* c% w, e

5 ~. u  e8 q! O: R5 _7 q  {' n, i) [+ ?5 u4 M4 \* ~' ~: ~
                由于10g,Oracle在发出DROP
% A& _% _. q+ S, A" oTABLE语句时不会立即删除表。相反,它像这样重命名它们BIN$IN1vjtqhTEKcWfn9PshHYg==$0并将它们放入回收站。这使我们能够恢复原本不想删除的表。% ~' H5 J$ z7 }! T6 T- x4 Z" M
了解更多。2 w) \7 g: o/ z% ~! }
回收站中的表仍然是表,因此它们显示在ALL_TABLES和类似视图中。因此,如果您只想查看仅与活动(未删除)表相关的注释,则需要按表名称进行过滤:
- v9 v3 c1 B. cselect * from all_tab_comments& E8 b% N$ V" }& ]( b
where substr(table_name,1,4) != 'BIN$'2 E6 X% F9 `4 B% Z& }
/
/ l$ I9 M% E' s  m, b' l$ i: v( L+ e
“我不相信没有标志列,所以可以这样做,并且is_recycled = 0或类似的东西。”3 c9 g7 G3 o7 r; g9 U" _5 X1 {$ I
7 G' E$ Q) a8 F
您是对的,这太不可思议了。因此,我检查了文档,结果发现Oracle 10g在USER_ / ALL_ /% H2 C* u8 T! \. |/ X4 I
DBA_TABLES视图中添加了一个名为DROPPED的列。! D, q, k9 U2 Z' g, x; s( g
select tc.*
6 s) Z0 r9 T, ^from all_tab_comments tc% n2 H- A' `- ^  s) V- a
     join all_tables t/ P% G$ x' I+ t# u
     on tc.owner = t.owner. Y0 h4 v* B2 s: U
     and tc.table_name = t.table_name
1 x4 b% ^9 `( Y4 o& J: Kwhere t.dropped = 'NO'9 W: M4 u$ q7 E' V
/* @2 l3 ~. P8 g7 \  M. C
查看文档。显然,加入ALL_TABLES视图需要比对名称进行过滤更多的键入操作,因此根据我们的需求,保留原始WHERE子句可能会更容易。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则