Oracle11g Oracle:与descripe命令类似的脚本

Oracle11g Oracle:与descripe命令类似的脚本,oracle11g,sqlplus,data-dictionary,Oracle11g,Sqlplus,Data Dictionary,我被要求创建一个脚本,它的功能基本上与descripe命令相同。 我已经知道了如何编写脚本并获得所需的输出,但任务的第二部分是“复制描述命令的格式”。我很困惑,真的有办法简单地复制该格式吗 假设您的查询类似(请注意,我并不费心处理每种不同的数据类型) 您可以发出一些SQL*Plus命令来格式化输出 SQL> column "Nmae" format a30; SQL> column "Null?" format a8; SQL> column "Type" format a30

我被要求创建一个脚本,它的功能基本上与descripe命令相同。
我已经知道了如何编写脚本并获得所需的输出,但任务的第二部分是“复制描述命令的格式”。我很困惑,真的有办法简单地复制该格式吗

假设您的查询类似(请注意,我并不费心处理每种不同的数据类型)

您可以发出一些SQL*Plus命令来格式化输出

SQL> column "Nmae" format a30;
SQL> column "Null?" format a8;
SQL> column "Type" format a30;
然后,查询的输出将与
descripe
命令的输出匹配

SQL> ed
Wrote file afiedt.buf

  1  select column_name "Name",
  2         (case when nullable = 'N'
  3               then 'NOT NULL'
  4               else null
  5           end) "Null?",
  6         (case when data_type = 'DATE'
  7               then data_type
  8               when data_type = 'NUMBER' and data_scale > 0
  9               then data_type || '(' || data_precision || ',' || data_scale || ')'
 10               when data_type = 'NUMBER' and data_scale = 0
 11               then data_type || '(' || data_precision || ')'
 12               when data_type = 'VARCHAR2'
 13               then data_type || '(' || data_length || ')'
 14          end) "Type"
 15    from dba_tab_cols
 16   where table_name = 'EMP'
 17*  order by column_id
SQL> /

Name                           Null?    Type
------------------------------ -------- ------------------------------
EMPNO                          NOT NULL NUMBER(4)
ENAME                                   VARCHAR2(10)
JOB                                     VARCHAR2(9)
MGR                                     NUMBER(4)
HIREDATE                                DATE
SAL                                     NUMBER(7,2)
COMM                                    NUMBER(7,2)
DEPTNO                                  NUMBER(2)

8 rows selected.

这实际上正是我所想的,但我不确定是否有办法复制准确的格式,只是想确保我没有遗漏什么,想尽可能地正确,谢谢!
SQL> ed
Wrote file afiedt.buf

  1  select column_name "Name",
  2         (case when nullable = 'N'
  3               then 'NOT NULL'
  4               else null
  5           end) "Null?",
  6         (case when data_type = 'DATE'
  7               then data_type
  8               when data_type = 'NUMBER' and data_scale > 0
  9               then data_type || '(' || data_precision || ',' || data_scale || ')'
 10               when data_type = 'NUMBER' and data_scale = 0
 11               then data_type || '(' || data_precision || ')'
 12               when data_type = 'VARCHAR2'
 13               then data_type || '(' || data_length || ')'
 14          end) "Type"
 15    from dba_tab_cols
 16   where table_name = 'EMP'
 17*  order by column_id
SQL> /

Name                           Null?    Type
------------------------------ -------- ------------------------------
EMPNO                          NOT NULL NUMBER(4)
ENAME                                   VARCHAR2(10)
JOB                                     VARCHAR2(9)
MGR                                     NUMBER(4)
HIREDATE                                DATE
SAL                                     NUMBER(7,2)
COMM                                    NUMBER(7,2)
DEPTNO                                  NUMBER(2)

8 rows selected.