DBMS_METADATA包
        GET_DDL 函数用于获取数据库对表、视图、索引、全文索引、存储过程、函数、包、序列、同义词、约束、触发器等的 DDL 语句。
        MPP 环境下不支持使用 DBMS_METADATA 包。

1、DBMS_METADATA.GET_DDL方法介绍
获取指定对象元数据中的 DDL 语句。

1.1 语法如下:
FUNCTION GET_DDL(
    OBJECT_TYPE IN VARCHAR(30),
    NAME IN VARCHAR(128),
    SCHNAME IN VARCHAR(128) DEFAULT NULL
) RETURN CLOB

1.2 参数详解:
OBJECT_TYPE: 对象类型。包括表、视图、物化视图、索引、全文索引、存储过程、函数、包、目录等,详情请见 OPEN 参数详解。其中,OBJECT_TYPE 只能为大写。
NAME:  对象名称,区分大小写。
SCHEMA:  模式,默认是当前用户模式。

OBJECT_TYPE的类型包括:

达梦表空间和mysql的库 达梦数据库timestamp_达梦表空间和mysql的库

 

达梦表空间和mysql的库 达梦数据库timestamp_sql_02

1.3 返回值:
以 DDL 返回对象元数据中的 DDL 语句。
错误处理:
INVALID_ARGVAL:如果输入参数中存在空值或非法值。
OBJECT_NOT_FOUND:如果指定的对象在数据库中不存在

1.4 注意事项:
(1)如果使用disql需要进行下列格式化,特别需要对long进行设置,否则无法显示完整的SQL
(2)参数要使用大写,否则会查不到
set linesize 180
set pages 999
set long 1000

2.查看数据库对象SQL定义
2.1 表的SQL定义
[dmdba@dmdb04 ~]$ disql SYSDBA/SYSDBA@localhost:5236
服务器[localhost:5236]:处于普通打开状态
登录使用时间 : 2.425(ms)
disql V8
SQL> set linesize 200 pages 2000
SQL> set long 1000

--查看 SYSDBA 用户下 DMETL_USER 表的定义语句
SQL> select dbms_metadata.get_ddl('TABLE', 'DMETL_USER', 'SYSDBA') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_达梦表空间和mysql的库_03

2.2 视图的SQL定义
--查看 DEM 用户下 DMA_GROUP_ITEM_VIEW 视图的定义语句
SQL> select dbms_metadata.get_ddl('VIEW', 'DMA_GROUP_ITEM_VIEW', 'DEM') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_database_04

2.3 索引的SQL定义
--查看 DEM 用户下 INDEX33555462 索引的定义语句
SQL> select dbms_metadata.get_ddl('INDEX', 'INDEX33555462', 'DEM') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_SQL_05

2.4 表空间的SQL定义
--查看 表空间 MAIN 的定义语句
SQL> select dbms_metadata.get_ddl('TABLESPACE', 'MAIN') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_database_06

2.5 存储过程的SQL定义
--查看 DEM 用户下 FORBIDDEN_USER 存储过程的定义语句
SQL> select dbms_metadata.get_ddl('PROCEDURE', 'FORBIDDEN_USER', 'DEM') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_达梦表空间和mysql的库_07

2.6 函数的SQL定义
--查看 DEM 用户下 USER_LOGIN 函数的定义语句
SQL> select dbms_metadata.get_ddl('FUNCTION', 'USER_LOGIN', 'DEM') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_SQL_08

2.7 触发器的SQL定义
--查看 DEM 用户下 REF_CON_TRIG134218781 触发器的定义语句
SQL> select dbms_metadata.get_ddl('TRIGGER', 'REF_CON_TRIG134218781', 'DEM') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_达梦表空间和mysql的库_09

2.8 同义词的SQL定义
--查看 SYSDBA 用户下 HISTOGRAMS_TABLE 同义词的定义语句
SQL> select dbms_metadata.get_ddl('SYNONYM', 'HISTOGRAMS_TABLE', 'SYSDBA') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_sql_10

2.9 序列的SQL定义
--查看 SYS 用户下 DBMS_LOCK_ID_SEQ 序列的定义语句
SQL> select dbms_metadata.get_ddl('SEQUENCE', 'DBMS_LOCK_ID_SEQ', 'SYS') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_达梦表空间和mysql的库_11

2.10 包的SQL定义
--查看 SYS 用户下 DBMS_AQ 包的定义语句
SQL> select dbms_metadata.get_ddl('PACKAGE', 'DBMS_AQ', 'SYS') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_数据库_12

2.11 约束的SQL定义
--查看 DEM 用户下 CONS134218849 约束的定义语句
SQL> select dbms_metadata.get_ddl('CONSTRAINT', 'CONS134218849', 'DEM') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_SQL_13

2.12 用户的SQL定义
--查看 WW 用户的定义语句
SQL> select dbms_metadata.get_ddl('USER', 'WW') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_sql_14

2.13 角色的SQL定义
--查看 SOI 角色的定义语句
SQL> select dbms_metadata.get_ddl('ROLE', 'SOI') from dual;

达梦表空间和mysql的库 达梦数据库timestamp_SQL_15

 

3. 通过DM管理工具也能获得对象的SQL定义语句

达梦表空间和mysql的库 达梦数据库timestamp_达梦表空间和mysql的库_16

达梦表空间和mysql的库 达梦数据库timestamp_sql_17