是否可以通过单个“desc”查看多个表的结构。

时间:2015-02-17 18:29:39

标签: sql oracle10g

是否可以通过单个“desc”查看多个表的结构。我创建了下面的表my_contact,专业,兴趣,搜索,位置等,而不是再次输入“desc”我想要查看所选表的结构与单个查询。

无论如何都有可能吗?

1 个答案:

答案 0 :(得分:1)

您不能使用the SQL*Plus describe command一次获取有关一个以上对象的信息。

old question上,Ben通过查询相关数据字典视图,很好地概述了如何模拟单个表的客户端命令。

要获取多个表的类似信息,您需要提供表名列表,或者省略表名过滤器。但是您可能还希望在选择列表中包含表名,以便知道哪个列属于哪个表,并按表名和列ID对结果进行排序,这将模拟列顺序,如SQL * Plus describe命令所示

这扩展了Ben的答案中的数据类型显示,并且对于大多数数据类型应该接近describe;但添加了表名:

select table_name as "Table",
  column_name as "Column",
  case when nullable = 'N' then 'NOT NULL' end as "Null?",
  cast (data_type || case 
    when data_type in ('VARCHAR', 'VARCHAR2', 'NVARCHAR2', 'RAW', 'CHAR')
      then '(' || data_length || ')'
    when data_type in ('NUMBER')
        and (data_precision is not null or data_scale is not null)
      then '(' || data_precision || case
        when data_scale > 0 then ',' || data_scale
      end || ')'
    end as varchar2(30)) as "Type"
from user_tab_columns
where table_name in ('MY_CONTACT', 'PROFESSION', 'INTEREST', 'SEEKING', 'LOCATION')
order by table_name, column_id;

我嘲笑了你的一个表名,所以我看到了:

Table                          Column                         Null?    Type                          
------------------------------ ------------------------------ -------- ------------------------------
MY_CONTACT                     ID                             NOT NULL NUMBER(38)                     
MY_CONTACT                     COL1                                    VARCHAR2(10)                   
MY_CONTACT                     COL2                                    NUMBER(5,2)                    
MY_CONTACT                     COL3                                    NUMBER                         
MY_CONTACT                     COL4                                    CLOB                           
MY_CONTACT                     COL5                                    DATE                           
MY_CONTACT                     COL6                                    TIMESTAMP(6)                   
MY_CONTACT                     COL7                                    TIMESTAMP(3)                   
MY_CONTACT                     COL8                                    CHAR(1)                        

desc类似:

SQL> desc my_contact
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(38)
 COL1                                               VARCHAR2(10)
 COL2                                               NUMBER(5,2)
 COL3                                               NUMBER
 COL4                                               CLOB
 COL5                                               DATE
 COL6                                               TIMESTAMP(6)
 COL7                                               TIMESTAMP(3)
 COL8                                               CHAR(1)

如果要查看所有表,请排除where子句。如果您还想查看其他人的表,请查询all_tab_columns并在选择列表和order by子句中包含owner;但是你可能想要排除像SYS这样的内置帐户。

如果你想经常运行它,你也可以使它成为一个视图或一个函数,但隐藏了复杂性。