文章目录

  • 1、DBMS_METADATA.GET_DDL包详解以及使用案例
    • 1.1、官方文档参考
    • 1.2、常用获取ddl信息案例
      • 1.2.1、查看表以及对应索引创建语句
      • 1.2.2、获取用户下所有对象的ddl语句
      • 1.2.3、单独获取表上约束ddl语句
      • 1.2.4、获取创建用户以及授权ddl语句
      • 1.2.5、获取表空间ddl语句
    • 1.3、dbms_metadata.set_transform_param函数详解
  • 2、查看表上列信息,补充desc的功能

吐个槽:Oracle数据库有很多地方设计的不人性化,比如,sqlplus中不能像mysql中一样翻历史记录。不能像mysql一样show table就可以看到表创建语句以及索引情况。所以,还要自己去写脚本,希望有脚本能一把梭,像plsql那样展示出表结构以及索引信息。

1、DBMS_METADATA.GET_DDL包详解以及使用案例

1.1、官方文档参考

Database PL/SQL Packages and Types Reference -> 87 DBMS_METADATA

官方文档中详细的说明了包的定义,get_ddl函数等具体用法,信息量比较大,平时常用的不多,本文主要讲查询表结构相关信息。

1.2、常用获取ddl信息案例

1.2.1、查看表以及对应索引创建语句

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',false);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', TRUE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
select DBMS_METADATA.GET_DDL('TABLE', OBJECT_NAME, OWNER)FROM Dba_objectswhere owner = '&&t_owner'and object_name = '&&t_name'and object_type = 'TABLE'
union all
select dbms_metadata.GET_DEPENDENT_DDL('COMMENT', TABLE_NAME, OWNER)FROM (select table_name, ownerfrom Dba_col_commentswhere owner = '&&t_owner'and table_name = '&&t_name'and comments is not nullunionselect table_name, ownerfrom sys.Dba_TAB_commentswhere owner = '&&t_owner'and table_name = '&&t_name'and comments is not null)
union all
select DBMS_METADATA.GET_DDL('INDEX', INDEX_NAME, OWNER)FROM (select index_name, ownerfrom sys.Dba_indexeswhere table_owner = '&&t_owner'and table_name = '&&t_name'and generated = 'N'minusselect index_name, ownerfrom sys.Dba_constraintswhere owner = '&&t_owner'and table_name = '&&t_name')
union all
select dbms_metadata.GET_DDL('TRIGGER', trigger_name, owner)from Dba_triggerswhere table_owner = '&&t_owner'and table_name = '&&t_name';

1.2.2、获取用户下所有对象的ddl语句

set pagesize 0
set long 90000
set feedback off
set echo off
spool schema.sql
select DBMS_METADATA.GET_DDL('TABLE',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and oject_type = 'TABLE';
select DBMS_METADATA.GET_DDL('VIEW',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and oject_type = 'VIEW';
select DBMS_METADATA.GET_DDL('INDEX',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and oject_type = 'INDEX';
select DBMS_METADATA.GET_DDL('PROCEDURE',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and oject_type = 'PROCEDURE';
select DBMS_METADATA.GET_DDL('FUNCTION',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and object_type = 'FUNCTION';
select DBMS_METADATA.GET_DDL('TRIGGER',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and object_type = 'TRIGGER';
select DBMS_METADATA.GET_DDL('SEQUENCE',u.object_name,owner) from dba_objects u where owner = '&&o_owner' and object_type = 'SEQUENCE';
spool off;

获取单个对象信息时,按照对象类型传入具体的对象名称以及用户名即可,如下:

select dbms_metadata.get_ddl('TABLE','TAB_NAME','SCOTT') from dual;
select dbms_metadata.get_ddl('VIEW','VIEW_NAME','SCOTT') from dual;
select dbms_metadata.get_ddl('INDEX','IDX_NAME','SCOTT') from dual;

1.2.3、单独获取表上约束ddl语句

-- 查看创建主键的SQL
SELECT DBMS_METADATA.GET_DDL('CONSTRAINT',constraint_name,OWNER) FROM dba_constraints where constraint_type = 'C' and owner = '&&u_name';
--查看创建外键的SQL
SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT',constraint_name,OWNER) where constraint_type = 'F' and owner = '&&u_name';

来自官方的约束类型解释:

C - Check constraint on a table
P - Primary key
U - Unique key
R - Referential integrity
V - With check option, on a view
O - With read only, on a view
H - Hash expression
F - Constraint that involves a REF column
S - Supplemental logging

1.2.4、获取创建用户以及授权ddl语句

SELECT DBMS_METADATA.GET_DDL('USER',U.username) FROM DBA_USERS U;select dbms_metadata.get_granted_ddl('ROLE_GRANT',username) from dba_users where username = '&&u_name';
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT',username) from dba_users where username = '&&u_name';
select dbms_metadata.get_granted_ddl('OBJECT_GRANT',username)||";" from dba_users where username = '&&u_name';

1.2.5、获取表空间ddl语句

SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name) FROM DBA_TABLESPACES TS;

1.3、dbms_metadata.set_transform_param函数详解

    --输出信息采用缩排或换行格式化exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'pretty', true);--确保每个语句都带分号exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'sqlterminator', true);--关闭表索引、外键等关联(后面单独生成)exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'constraints', false);exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'ref_constraints', false);exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'constraints_as_alter', false);--关闭存储、表空间属性exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'storage', false);exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'tablespace', false);--关闭创建表的PCTFREE、NOCOMPRESS等属性exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'segment_attributes', false);

2、查看表上列信息,补充desc的功能

Oracle的desc命令看表结构信息,看到的信息有限,从sql developer开发工具中抓到一个挺好用的查看表结构信息的sql语句,可以作为补充:

select c.column_name,  case when data_type = 'CHAR'     then      data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'    when data_type = 'VARCHAR'  then      data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'    when data_type = 'VARCHAR2' then      data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'    when data_type = 'NCHAR'    then      data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'    when data_type = 'NUMBER' then      case when c.data_precision is null and c.data_scale is null then          'NUMBER' when c.data_precision is null and c.data_scale is not null then          'NUMBER(38,'||c.data_scale||')' else           data_type||'('||c.data_precision||','||c.data_SCALE||')'      end    when data_type = 'NVARCHAR' then      data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'    when data_type = 'NVARCHAR2' then     data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'    else      data_type    end data_type,decode(nullable,'Y','Yes','No') nullable,  c.DATA_DEFAULT,column_id,   com.comments       from sys.Dba_tab_Columns c, sys.Dba_col_comments comwhere c.owner      = upper('&t_owner')and  c.table_name =  upper('&t_name') and c.table_name = com.table_nameand c.owner = com.ownerand c.column_name = com.column_name               order by column_id;

Oracle中一把梭获取对象DDL创建语句相关推荐

  1. gettype获取类名_在TypeScript中运行时获取对象的类名

    在TypeScript中运行时获取对象的类名 是否可以使用typescript在运行时获取对象的类/类型名称? class MyClass{} var instance = new MyClass() ...

  2. 【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?

    ♣题目 部分 在Oracle中,如何获取SQL历史执行计划? ♣答案部分 历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示: 1SE ...

  3. oracle查看创建索引语句,ORACLE下如何获得全部的索引创建语句

    ORACLE下如何获得全部的索引创建语句 ORACLE下如何获得全部的索引创建语句 今天打算将一个数据库的索引在另一个测试库上重新创建一遍,研究了一下. set pagesize 0 set long ...

  4. Oracle中start with xx connect by prior 语句解析

    Oracle中start with xx connect by prior 语句解析 ​ Oracle这种的start with语句主要对B型树的数据进行递归查询.可以指定数据树上的任一节点,然后查找 ...

  5. Python中面向对象self获取对象属性,魔法方法

    类和对象 类(Class) 由3个部分构成 01). 类的名称:类名 02). 类的属性:一组数据 03). 类的方法:允许对进行操作的方法 (行为) 定义类 object 是Python 里所有类的 ...

  6. 在Oracle中写出性能优良的SQL语句

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器 ...

  7. Oracle中根据中文获取拼音首字母

    前言 在软件中方便用户查找信息时,都会用到输拼音首字母的简写快速过滤,所以一般我们在Oracle的表中会加上一列助记符列,今天我们就看看将中文怎么转换为拼音首字母. 实现方式 通过oracle的NLS ...

  8. oracle表段是什么,【DB笔试面试274】在Oracle中,什么是延迟段创建(Deferred Segment Crea......

    A答案如下所示: 在Oracle 11.2中,当创建一个空表或者空分区时,为了加快创建速度,Oracle并不会立即分配初始段和空间,实际的表段(Table Segement)被延迟到第一行数据插入时创 ...

  9. oracle中快速复制数据表(创建数据表)

    1.普通创建表方式如下: create table emp(empno number(4) primary key,ename varchar2(20),sal number(7,2)); 2.快速创 ...

最新文章

  1. 0x04.基本算法 — 二分和三分
  2. iOS-UICollectionView
  3. WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
  4. css 向左白色箭头,带CSS的工具提示左侧的箭头
  5. Spring Cloud 微服务实战系列-Spring Boot再次入门(二)
  6. D3 二次方曲线与切线
  7. dell服务器t330进入不了系统,Re: 戴尔T330服务器故障
  8. 【Selenium2】【Shell】
  9. php基础-php基本语法
  10. 解决Odoo出现的Unable to send email, please configure the sender's email address or alias.
  11. android 通过串口来控制pwm的输出_ESP8266_07基于PWM的呼吸灯
  12. 文字处理(WORD/WP)中,布局与绘制必然分开
  13. 淘思精灵-网赚菜鸟的福音
  14. cups ipp oracle,架设Linux打印服务器通过Web界面CUPS管理其他电脑访问CUPS web管理界面IPP协议共享本机打印机...
  15. C++经典编程题目(九)玩火柴棍游戏
  16. 钢铁侠机器人公仔_自己再演一遍复联!优必选钢铁侠 MK50 机器人评测
  17. 读《TOWARDS EXPRESSIVE SPEAKING STYLE MODELLING WITH HIERARCHICAL CONTEXT INFORMATION FOR MANDARIN》
  18. 二元函数可微与偏导数_二元函数的连续、偏导数、可微之间的关系-推荐下载...
  19. 如何挖掘网站的长尾关键词?
  20. 卡塔尔世界杯亚洲球队表现给我们的一些启示和思考

热门文章

  1. 【干货】2020年陆奇最新万字演讲:世界新格局下的创业创新机会.pdf(附下载链接)...
  2. 亿级规模的Feed流推荐系统,如何轻松设计?
  3. 速成pytorch学习——6天Dataset和DataLoader
  4. 数据挖掘之自然语言处理
  5. 机器学习模型融合方法综述
  6. 跨境电商为什么要用ERP系统?
  7. 生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN等原理介绍、应用介绍及简单Tensorflow实现
  8. 微信小程序wx.getUserProfile
  9. 深入理解虚拟机之虚拟机类加载机制
  10. python接口自动化(二十八)--html测试 报告——下(详解)