【问题标题】:Is it possible to see the structure of mulitple table with a single "desc".是否可以使用单个“desc”查看多个表的结构。
【发布时间】:2015-02-17 18:29:38
【问题描述】:

是否可以用一个“desc”查看多个表的结构。我已经创建了下表 my_contact、professional、interest、seeking、location 等,而不是一次又一次地输入“desc”,我想通过单个查询查看所选表的结构。

有可能吗?

【问题讨论】:

  • 不使用 SQL*Plus describe 命令,但您可以查询数据字典 - 取决于您想要查看的内容。
  • 我只是想看看表的结构,而不是它们包含的数据
  • 数据字典包含表的元数据,而不是实际数据。请参阅本对我将其链接到的问题的回答;只需将单个表的过滤器更改为表列表(使用in)或将其保留以查看所有表。您可能希望在选择列表中包含表名并按顺序排列,想想吧……
  • 你能重新打开这个问题吗?

标签: sql oracle10g


【解决方案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 ('VARCHAR2', 'NVARCHAR2', 'CHAR', 'NCHAR')
      then '(' || char_length || case when char_used = 'C' then ' CHAR' else ' BYTE' end || ')'
    when data_type in ('RAW', 'TIMESTAMP')
      then '(' || data_length || ')'
    when data_type in ('NUMBER')
        and (data_precision is not null or data_scale is not null)
      then '(' || coalesce(data_precision, 38) || 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;

我使用以下方法模拟了您的一个表名:

create table my_contact (
  id number(38) primary key,
  col1 varchar2(10 char),
  col2 varchar2(32 byte),
  col3 raw(64),
  col4 number(5,2),
  col5 number,
  col6 number(*,3),
  col7 number(*,0),
  col8 clob,
  col9 date,
  col10 timestamp,
  col11 timestamp(3),
  col12 char
);

所以我的查询是:

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

类似于desc:

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

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

如果您想经常运行它但隐藏复杂性,您也可以将其设为视图或函数。

【讨论】:

  • 感谢亚历克斯回答我的愚蠢问题。我刚开始学习oracle sql
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2021-05-08
相关资源
最近更新 更多