达梦数据库——获取表结构和对象定义⽅法
很多新⼿在开始使⽤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 _ddl(OBJECT_TYPE => 'TABLE',NAME=>upper('EMPLOYEE'),SCHNAME => 'DMHR');
结果展⽰如下,从结果中可查看表及相关主键、外键、唯⼀性约束等相关定义:
②获取函数/存储过程定义语句
执⾏如下命令查询DMHR⽤户下存储过程P_EXPORTDATA的定义语句:
select _ddl(OBJECT_TYPE => 'PROCEDURE',NAME=UPPER('P_EXPORTDATA'),SCHNAME='DMHR');
在DISQL窗⼝下执⾏时需注意返回的字符串过长会被截断,需设置long属性值较⼤。如下是DISQL窗⼝执⾏参考结果(也可在管理⼯具查询窗⼝执⾏):
③获取包定义语句
执⾏如下命令查询SYSJOB⽤户下系统包DBMS_JOB的定义语句:
select _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');
disql窗⼝下展⽰结果如下,可以看到表字段较多时会多⾏展⽰,格式不整体,视觉上看起来不⽅便,不推荐此⽅法。
②查询视图定义语句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如参考如下:
lumn_name, t.data_type, t.data_length, t.nullablefrom user_tab_columns twhere 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.textfrom dba_views twhere 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>;
各对象获取的内容略有不同。
表或视图获取的内容包括:列名,列数据类型,列是否可以取空值。
函数、过程、类获取的内容包括两类:parameter数据类型
1)存储函数/过程名,类型(函数或过程),函数返回值类型;
2)参数名,参数数据类型、参数输⼊输出属性、参数缺省值。
包获取的内容分为两类:
1)包内存储函数/过程名,类型(函数或过程),函数返回值类型;
2)包内参数名,参数数据类型、参数输⼊输出属性、参数缺省值。
记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。
①获取表/视图字段信息
使⽤DISQL⼯具登录DM数据库,执⾏如下命令获取DMHR⽤户下EMPLOYEE表结果信息:
ployee;
展⽰结果参考如下,可以看出此命令使⽤简单,展⽰字段信息更直观:
②获取函数/存储过程的结构信息
使⽤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类型输出,格式上更整齐,⽅便输出和查看。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论