暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

干货分享|DM数据库获取表结构和对象定义方法

达梦大数据 2020-05-15
2606

很多新手在开始使用DM数据库时,都遇到过如何获取表结构信息的问题,今日我整理了获取表结构的各种方法,也可以从这些方法中获取其他对象的定义信息,比如表、视图、存储过程、函数、包等DDL创建语句,供大家参考。


本章介绍DM数据库获取表结构方法。

本章的测试环境:

①操作系统:Windows 10 (64位)

②数据库版本:DM8

相关关键字:DM数据库对象定义语句 表结构


DM数据库获取对象定义信息



下面从系统包、系统过程、数据字典、DISQL窗口和客户端管理工具等方面介绍获取表结构、视图和其他对象定义的方法。



01


使用DBMS_META系统包

DBMS_META系统包兼容Oracle功能,其GET_DDL函数用于获取数据库对表、视图、索引、全文索引、存储过程、函数、包、序列、同义词、约束、触发器等定义的DDL语句。


语法如下:

    FUNCTIONG GET_DDL(
    OBJECT_TYPE IN VARCHAR(30),
    NAME IN VARCHAR(128),
    SCHNAME IN VARCHAR(128) DEFAULT NULL
    )RETURN CLOB

    参数详解

    OBJECT_TYPE对象类型。包括表、视图、物化视图、索引、全文索引、存储过程、函数、包、目录等,具体可参考《DM8系统包使用手册》。OBJECT_TYPE只能为大写。

    NAME 对象名称,区分大小写。

    SCHEMA 模式,默认是当前用户模式。


    ①获取表定义语句

      select dbms_metadata.get_ddl(OBJECT_TYPE => 'TABLE',
      NAME=>upper('EMPLOYEE'),SCHNAME => 'DMHR');

      结果展示如下,从结果中可查看表及相关主键、外键、唯一性约束等相关定义:





      ②获取函数/存储过程定义语句

      执行如下命令查询DMHR用户下存储过程P_EXPORTDATA的定义语句:

        select dbms_metadata.get_ddl(OBJECT_TYPE => 'PROCEDURE',
        NAME=UPPER('P_EXPORTDATA'),SCHNAME='DMHR');

        在DISQL窗口下执行时需注意返回的字符串过长会被截断,需设置long属性值较大。如下是DISQL窗口执行参考结果(也可在管理工具查询窗口执行):





        ③获取包定义语句

        执行如下命令查询SYSJOB用户下系统包DBMS_JOB的定义语句:

          select dbms_metadata.get_ddl(OBJECT_TYPE => 'PACKAGE', 
          NAME=>upper('DBMS_JOB'), SCHNAME => 'SYSJOB');


          如下是在管理工具查询窗口的执行结果,点击【另存为】可以保存为文本文件,方便阅读。






          02


          使用SP_TABLEDEF、

          SP_VIEWDEF系统过程


          DM数据库提供SP_TABLEDEF、SP_VIEWDEF系统过程,以结果集的形式返回表和视图的DDL创建语句。


          ①查询表定义SP_TABLEDEF

          SP_TABLEDEF以结果集的形式返回表的定义。语法如下:

            void SP_TABLEDEF (
            schname varchar(128),
            tablename varchar(128)
            )

            数说明

            schname:模式名

            tablename:表名


            如使用DMHR用户查询其当前用户下EMPLOYEE表结构,执行命令如下:

              call sp_tabledef(user, 'EMPLOYEE');

              DI SQL窗口下展示结果如下,可以看到表字段较多时会多行展示,格式不整体,视觉上看起来不方便,不推荐此方法。






              ②查询视图定义语句SP_VIEWDEF

              SP_VIEWDEF以结果集的形式返回视图的定义,语法如下:

                void SP_VIEWDEF (
                schname varchar(128),
                viewname varchar(128)
                )

                参数说明

                schname:模式名

                viewname:视图名


                如查询SYS用户下ALL_ALL_TABLES视图定义,执行如下命令:

                  call sp_viewdef('SYS','ALL_ALL_TABLES');


                  在管理工具查询窗口执行结果展示如下,可以看出,视图定义过长时(字符串超过32767),记录会拆分多行展示,查看数据选择【另存为】可以保存为文本格式,但每行数据要单独保存,视图定义较长时不方便。也可在DISQL下执行,格式不整体,不推荐此方法。






                  03


                  使用数据字典

                  DM数据库提供兼容大部分Oracle功能的系统数据字典,包含DBA_TABLES、DBA_TAB_COLUMNS、DBA_VIEWS、DBA_SOURCE等数据字典,方便用户查询表结构、视图、对象定义等相关信息。


                  ①查询表/视图字段信息

                  USER_TAB_COLUMNS/ALL_TAB_COLUMNS/DBA_TAB_COLUMNS

                  DBA_TAB_COLUMNS显示数据库中所有表、视图或聚簇的列。表字段定义略。

                  ALL_TAB_COLUMNS显示当前用户能够访问的表、视图或聚簇的列。表结构同DBA_TAB_COLUMNS。

                  USER_TAB_COLUMNS显示当前用户所拥有的表、视图或聚簇的列。


                  如使用DMHR用户查询其当前用户下EMPLOYEE表结构,查询SQL如参考如下:

                    select t.column_name, t.data_type, t.data_length, t.nullable
                    from user_tab_columns t
                    where table_name='EMPLOYEE';

                    执行结果参考如下:






                    ②查询视图定义信息USER_VIEWS/ALL_VIEWS/DBA_VIEWS

                    DBA_VIEWS显示数据库中所有的视图。其TEXT字段为TEXT类型,保存视图的DDL定义语句。

                    ALL_VIEWS显示当前用户能够访问的所有视图,结构同DBA_VIEWS。

                    USER_VIEWS显示当前用户所拥有的所有视图,结构同DBA_VIEWS,没有OWNER列。


                    如查询USER_VIEWS视图的定义信息,sql语句如下:

                      select t.owner, t.view_name, t.text_length, t.text
                      from dba_views t
                      where t.view_name = upper('user_views');

                      语句结果展示如下(也可在管理工具查询窗口执行),注意这里TEXT内容是视图定义语句,如果是查询字段信息,可使用上述方法①。






                      ③查询对象定义信息USER_SOURCE/ALL_SOURCE/DBA_SOURCE

                      DBA_SOURCE包含数据库中包、包体、存储过程、函数、触发器、TYPE对象的源码。其TEXT字段为TEXT类型,存放对象源码。

                      使用如下命令可查询系统包DBMS_METADATA的定义信息:

                        select* from dba_source t where t.NAME = 'DBMS_METADATA';

                        管理工具查询窗口执行结果如下(注意系统包包头可正常查看,但包体源码加密),选择【另存为】可保存至文本文件方便查看:






                        04


                        使用DESC命令(DISQL工具)


                        DESCRIBE命令是DISQL工具中的命令,用于获取对象结构信息,可获取表或视图、存储过程、函数、包、记录、类的结构信息,只能在DISQL窗口下使用。语法如下:

                          DESC[RIBE] <table>|<view>|<proc>|<fun>|<pkg>|<record>|<class>;


                          各对象获取的内容略有不同。

                          表或视图获取的内容包括:列名,列数据类型,列是否可以取空值。

                          函数、过程、类获取的内容包括两类:

                          1)存储函数/过程名,类型(函数或过程),函数返回值类型;

                          2)参数名,参数数据类型、参数输入输出属性、参数缺省值。

                          包获取的内容分为两类:

                          1)包内存储函数/过程名,类型(函数或过程),函数返回值类型;

                          2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。

                          记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。


                          ①获取表/视图字段信息

                          使用DISQL工具登录DM数据库,执行如下命令获取DMHR用户下EMPLOYEE表结果信息:

                            desc dmhr.employee;

                            展示结果参考如下,可以看出此命令使用简单,展示字段信息更直观:






                            ②获取函数/存储过程的结构信息

                            使用SYSDBA用户执行如下命令,获取系统存储过程sp_tabledef的结构信息。

                              desc sp_tabledef;


                              展示结果参考如下(展示参数和返回值信息):






                              ③获取包(PACKAGE)的结构信息

                              使用SYSDBA用户执行如下命令,获取系统包dbms_logmnr的结构信息。

                                desc dbms_logmnr;

                                展示结果参考如下(展示方法名,各方法参数和返回值信息):






                                05


                                客户端管理工具


                                DM客户端管理工具也提供了查看对象定义的功能,其可视化窗口使用起来更易上手,方便快捷。


                                ①对象属性中获取对象定义语句

                                右击对象名称,选择最下面【属性】,打开对象属性页面,选择DDL页签,可查看对象的DDL定义语句,可点击【保存】,保存至文件更方便阅读。






                                ②Create To获取对象定义语句

                                右击对象名称,选择【生成SQL脚本】->【Create To】,选择粘贴板或编辑器都行,可查看对象(包含表、视图、过程、函数、包、序列、表空间、同义词等)的定义语句。



                                //////////


                                好了,以上是查看表结构和对象定义的各种方法,大家可根据自己的喜好选择。在查询表结构方面,推荐使用desc命令更简单快捷,但缺点是只能在DISQL窗口下使用。在查询存储过程或函数的定义方面,除客户端工具外,推荐使用DBMS_META系统包或DBA_SOURCE数据字典视图,两者分别以CLOB和TEXT类型输出,格式上更整齐,方便输出和查看。


                                本次分享到此结束,感谢大家。





                                往期精选



                                围观

                                【干货分享】DM数据库迁移方法(物理迁移)


                                热文

                                【干货分享】DM数据库使用UTL_FILE读写文件方法




                                最后修改时间:2020-06-12 17:43:46
                                文章转载自达梦大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论