Oracle中一把梭获取对象DDL创建语句
文章目录
- 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创建语句相关推荐
- gettype获取类名_在TypeScript中运行时获取对象的类名
在TypeScript中运行时获取对象的类名 是否可以使用typescript在运行时获取对象的类/类型名称? class MyClass{} var instance = new MyClass() ...
- 【DB笔试面试600】在Oracle中,如何获取SQL历史执行计划?
♣题目 部分 在Oracle中,如何获取SQL历史执行计划? ♣答案部分 历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示: 1SE ...
- oracle查看创建索引语句,ORACLE下如何获得全部的索引创建语句
ORACLE下如何获得全部的索引创建语句 ORACLE下如何获得全部的索引创建语句 今天打算将一个数据库的索引在另一个测试库上重新创建一遍,研究了一下. set pagesize 0 set long ...
- Oracle中start with xx connect by prior 语句解析
Oracle中start with xx connect by prior 语句解析 Oracle这种的start with语句主要对B型树的数据进行递归查询.可以指定数据树上的任一节点,然后查找 ...
- Python中面向对象self获取对象属性,魔法方法
类和对象 类(Class) 由3个部分构成 01). 类的名称:类名 02). 类的属性:一组数据 03). 类的方法:允许对进行操作的方法 (行为) 定义类 object 是Python 里所有类的 ...
- 在Oracle中写出性能优良的SQL语句
我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器 ...
- Oracle中根据中文获取拼音首字母
前言 在软件中方便用户查找信息时,都会用到输拼音首字母的简写快速过滤,所以一般我们在Oracle的表中会加上一列助记符列,今天我们就看看将中文怎么转换为拼音首字母. 实现方式 通过oracle的NLS ...
- oracle表段是什么,【DB笔试面试274】在Oracle中,什么是延迟段创建(Deferred Segment Crea......
A答案如下所示: 在Oracle 11.2中,当创建一个空表或者空分区时,为了加快创建速度,Oracle并不会立即分配初始段和空间,实际的表段(Table Segement)被延迟到第一行数据插入时创 ...
- oracle中快速复制数据表(创建数据表)
1.普通创建表方式如下: create table emp(empno number(4) primary key,ename varchar2(20),sal number(7,2)); 2.快速创 ...
最新文章
- 0x04.基本算法 — 二分和三分
- iOS-UICollectionView
- WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- css 向左白色箭头,带CSS的工具提示左侧的箭头
- Spring Cloud 微服务实战系列-Spring Boot再次入门(二)
- D3 二次方曲线与切线
- dell服务器t330进入不了系统,Re: 戴尔T330服务器故障
- 【Selenium2】【Shell】
- php基础-php基本语法
- 解决Odoo出现的Unable to send email, please configure the sender's email address or alias.
- android 通过串口来控制pwm的输出_ESP8266_07基于PWM的呼吸灯
- 文字处理(WORD/WP)中,布局与绘制必然分开
- 淘思精灵-网赚菜鸟的福音
- cups ipp oracle,架设Linux打印服务器通过Web界面CUPS管理其他电脑访问CUPS web管理界面IPP协议共享本机打印机...
- C++经典编程题目(九)玩火柴棍游戏
- 钢铁侠机器人公仔_自己再演一遍复联!优必选钢铁侠 MK50 机器人评测
- 读《TOWARDS EXPRESSIVE SPEAKING STYLE MODELLING WITH HIERARCHICAL CONTEXT INFORMATION FOR MANDARIN》
- 二元函数可微与偏导数_二元函数的连续、偏导数、可微之间的关系-推荐下载...
- 如何挖掘网站的长尾关键词?
- 卡塔尔世界杯亚洲球队表现给我们的一些启示和思考
热门文章
- 【干货】2020年陆奇最新万字演讲:世界新格局下的创业创新机会.pdf(附下载链接)...
- 亿级规模的Feed流推荐系统,如何轻松设计?
- 速成pytorch学习——6天Dataset和DataLoader
- 数据挖掘之自然语言处理
- 机器学习模型融合方法综述
- 跨境电商为什么要用ERP系统?
- 生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN等原理介绍、应用介绍及简单Tensorflow实现
- 微信小程序wx.getUserProfile
- 深入理解虚拟机之虚拟机类加载机制
- python接口自动化(二十八)--html测试 报告——下(详解)