代码之家  ›  专栏  ›  技术社区  ›  gavenkoa

仅打印Oracle sqlplus中ORDER BY列的第一个唯一值

  •  1
  • gavenkoa  · 技术社区  · 12 年前

    这个脚本为Oracle转储带有列和注释的表(我所做的是:以人类可读的格式转储模式DDL,而不依赖于任何外部工具,只是 sqlplus ,我想将此脚本提交给SVN,以便任何团队成员都可以使用它):

    SELECT dt.table_name, dt.column_name, dt.data_type, dt.data_length, comm.comments
      FROM user_col_comments comm, user_tab_columns dt
      WHERE dt.table_name = comm.table_name
        AND dt.column_name = comm.column_name
      ORDER BY dt.table_name;
    

    输出看起来像:

    TBL111 COL11 ...
    TBL111 COL22 ...
    TBL222 COL11 ...
    TBL222 COL22 ...
    TBL222 COL33 ...
    TBL333 COL11 ...
    

    为了让它更易读,我想办法跳过不必要的内容 TBLxxx 话:

    TBL111 COL11 ...
           COL22 ...
    TBL222 COL11 ...
           COL22 ...
           COL33 ...
    TBL333 COL11 ...
    

    有什么建议吗?

    2 回复  |  直到 12 年前
        1
  •  4
  •   arnep    12 年前

    当您使用SQL*Plus生成报告时,您可以使用 BREAK ON columnname 以抑制查询结果中的重复项。

        2
  •  1
  •   a_horse_with_no_name    12 年前
    SELECT case 
             when row_number() over (partition by dt.table_name order by dt.table_name) = 1 then dt.table_name
             else null
           end as table_name, 
           dt.column_name, 
           dt.data_type, 
           dt.data_length, 
           comm.comments
    FROM user_col_comments comm, user_tab_columns dt
    WHERE dt.table_name = comm.table_name
      AND dt.column_name = comm.column_name
    ORDER BY dt.table_name, dt.column_id;