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

Tri*_*tan 19 sql oracle

我试过了 :

select * from user_tab_comments;
Run Code Online (Sandbox Code Playgroud)

它返回3列"TABLE_NAME","TABLE_TYPE"和"COMMENTS",但"TABLE_NAME"列类似于"加密",我需要清楚的表名:

TABLE_NAME                      TABLE_TYPE  COMMENTS

BIN$IN1vjtqhTEKcWfn9PshHYg==$0  TABLE       Résultat d'intégration d'une photo numérisée
BIN$PUwG3lb3QoazOc4QaC1sjw==$0  TABLE       Motif de fin d'agrément de maître de stage
Run Code Online (Sandbox Code Playgroud)

当我使用"select*from user_tables;"时 TABLE_NAME没有"加密".

APC*_*APC 23

由于10g Oracle在发出DROP TABLE语句时不会立即删除表.相反,它会像这样重命名它们BIN$IN1vjtqhTEKcWfn9PshHYg==$0并将它们放入回收站.这允许我们恢复我们并不意味着丢弃的表. 了解更多.

回收站中的表仍然是表,因此它们显示在ALL_TABLES和类似视图中.因此,如果您只想查看与实时(非删除)表相关的注释,则需要按表名过滤:

select * from all_tab_comments
where substr(table_name,1,4) != 'BIN$'
/
Run Code Online (Sandbox Code Playgroud)

"我不敢相信没有一个标志栏,所以你可以做,is_recycled = 0或者什么."

你是对的,这将是不可思议的.所以我查看了文档,事实证明Oracle 10g在USER_/ALL_/DBA_TABLES视图中添加了一个名为DROPPED的列.

select tc.* 
from all_tab_comments tc
     join all_tables t
     on tc.owner = t.owner
     and tc.table_name = t.table_name
where t.dropped = 'NO'
/
Run Code Online (Sandbox Code Playgroud)

查看文档.显然,需要加入ALL_TABLES视图需要更多的输入而不是过滤名称,因此根据我们的需要,保留原始WHERE子句可能更容易.

  • 我不敢相信没有标志列,所以你可以做`和is_recycled = 0`等等.还是有吗? (3认同)