是否可以通过单个“desc”查看多个表的结构。我创建了下面的表my_contact,专业,兴趣,搜索,位置等,而不是再次输入“desc”我想要查看所选表的结构与单个查询。
无论如何都有可能吗?
答案 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这样的内置帐户。
如果你想经常运行它,你也可以使它成为一个视图或一个函数,但隐藏了复杂性。