【问题标题】:Oracle: Script similar to describe commandOracle:类似于描述命令的脚本
【发布时间】:2012-11-02 06:52:38
【问题描述】:

我被要求创建一个与 describe 命令基本相同的脚本。 我已经想出了如何编写脚本并获得我想要的输出,但是任务的第二部分是“复制描述命令的格式”我很难过,真的有办法简单地复制那种格式吗?

【问题讨论】:

    标签: oracle11g sqlplus data-dictionary


    【解决方案1】:

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

    select column_name "Name",
           (case when nullable = 'N'
                 then 'NOT NULL'
                 else null
             end) "Null?",
           (case when data_type = 'DATE'
                 then data_type
                 when data_type = 'NUMBER' and data_scale > 0
                 then data_type || '(' || data_precision || ',' || data_scale || ')'
                 when data_type = 'NUMBER' and data_scale = 0
                 then data_type || '(' || data_precision || ')'
                 when data_type = 'VARCHAR2'
                 then data_type || '(' || data_length || ')'
            end) "Type"
      from dba_tab_cols
     where table_name = 'EMP'
     order by column_id
    

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

    SQL> column "Nmae" format a30;
    SQL> column "Null?" format a8;
    SQL> column "Type" format a30;
    

    然后您的查询输出将与DESCRIBE 命令的输出相匹配

    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.
    

    【讨论】:

    • 这实际上正是我的想法,但我不确定是否有某种方法可以复制确切的格式只是想确保我没有遗漏任何东西想要得到尽可能多的权利可能哈哈谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    相关资源
    最近更新 更多