• oracle导出数据字典


    一、概述

    系统快要开发完了,甲方要求验收项目的时候提供数据字典文件,但是我们开发的时候注释直接写在实体的字段上了。我们要求提供的数据字典是word文档。要是一个一个的复制那太麻烦了,于是怎么做呢?

    (1) 写个小工具类,把所有实体中的注释提取出来生成一个给表中字段添加注释的sql文件;

    (2) 执行sql文件将注释添加到数据库表中;

    (3) 采用datagrip或者navicat工具查询出你需要的数据字典项,然后导出为excel文件;

    (4) 复制到word;

    二、步骤

    其他步骤略,主要讲解第三步。

    1. oracle基表

    首先你需要了解一下oracle数据库中的关于表数据列以及列注释的几张基表:

    1.获取表:
    select table_name from user_tables; //当前用户拥有的表      
    select table_name from all_tables; //所有用户的表 
    select table_name from dba_tables; //包括系统表
    select table_name from dba_tables where owner='用户名'
     
    2.获取表字段:
    select * from user_tab_columns where Table_Name='用户表';
    select * from all_tab_columns where Table_Name='用户表';
    select * from dba_tab_columns where Table_Name='用户表';
    
    3.获取表注释:
    select * from user_tab_comments
    user_tab_comments:table_name,table_type,comments
    相应的还有dba_tab_comments,all_tab_comments,这两个比user_tab_comments多了ower列。
    
    4.获取字段注释:
    select * from user_col_comments
    user_col_comments:table_name,column_name,comments
    相应的还有dba_col_comments,all_col_comments,这两个比user_col_comments多了ower列。

    我们需要生成数据字典需要用到的信息一般有:字段名、字段类型、字段长度、是否非空、备注等。

    于是乎,我们可以用获取字段的基表和获取字段注释的基表进行关联,然后查询出你想要的信息,由于我们自己能够确定自己要生成数据字典的表是位于哪个用户,所以可以使用user_tab_columns和user_col_comments组合获取,而且使用这两个表的数据量相对小一些,效率高一些。

    2. 获取你需要的数据信息

    -- 1.你可以先看下这两个表中都有哪些字段信息
    select * from user_tab_columns where TABLE_NAME = 'MEM_LEVEL_TEMP_HISTORY';
    select * from user_col_comments where TABLE_NAME = 'MEM_LEVEL_TEMP_HISTORY';
    
    -- 2.核心sql: 可以更具你的需求修改
    select
    t.COLUMN_NAME as "字段名",
    decode(c.COMMENTS, null, ' ', c.COMMENTS) as "含义",
    decode(t.DATA_TYPE, 'TIMESTAMP(6)', t.DATA_TYPE, 'NUMBER', (t.DATA_TYPE || '(' || t.DATA_PRECISION || ')'),
        'DATE', t.DATA_TYPE, (t.DATA_TYPE || '(' || t.CHAR_LENGTH || ')')) as "长度",
    -- t.DATA_TYPE || '(' || t.CHAR_LENGTH || ')' as "类型(长度)",
    --  t.CHAR_LENGTH as "字段长度",
    t.NULLABLE AS "是否为空",
    ' ' as "备注"
    from USER_TAB_COLUMNS t join USER_COL_COMMENTS c on c.TABLE_NAME = t.TABLE_NAME and t.COLUMN_NAME = c.COLUMN_NAME
    where c.TABLE_NAME = 'MEM_LEVEL_TEMP_HISTORY'  --表名应该大写
    order by t.COLUMN_ID
    ;

    执行sql2,查询出你需要的信息。

    navicat工具:选择导出结果,然后将查询结果导出为excel文件,然后从excel复制到word;

                或者直接复制查询的结果,然后粘贴到excel表格,然后从excel复制到word;

    datagrid工具:修改查询结果的data extractors(数据提取器)的格式为HTML(groovy),如图:

     然后复制查询结果,直接粘贴到word。

    参考:

    Oracle中查看所有表和字段以及表注释.字段注释

    Navicat 将mysql、oracle表导出为数据字典

  • 相关阅读:
    将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档,以博客形式发表在博客园
    将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档
    课堂作业 异常与处理
    课堂作业05继承与多态
    课后作业04
    课堂作业03程序设计
    课堂作业03动手动脑问题
    课堂作业02程序设计作业
    课堂作业02动手动脑的问题
    课堂中所有的问题及其课后实验性的问题的文档
  • 原文地址:https://www.cnblogs.com/shiyun32/p/13157960.html
Copyright © 2020-2023  润新知