当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看。

dbms_metadata包中的get_ddl函数详细参数 
GET_DDL函数返回创建对象的原数据的DDL语句,详细参数如下
 -- object_type ---需要返回原数据的DDL语句的对象类型
 -- name --- 对象名称
 -- schema ---对象所在的Schema,默认为当前用户所在所Schema
 -- version ---对象原数据的版本
 -- model ---原数据的类型默认为Oracle
 -- transform. - XSL-T transform. to be applied.
 -- RETURNS: 对象的原数据默认以CLOB类型返回

dbms_metadata包中的get_ddl函数定义 
FUNCTION get_ddl ( object_type IN VARCHAR2,
 name IN VARCHAR2,
 schema IN VARCHAR2 DEFAULT NULL,
 version IN VARCHAR2 DEFAULT 'COMPATIBLE',
 model IN VARCHAR2 DEFAULT 'ORACLE',
 transform. IN VARCHAR2 DEFAULT 'DDL') RETURN CLOB;

注意如果使用sqlplus需要进行下列格式化,特别需要对long进行设置,否则无法显示完整的SQL

set linesize 180    
set pages 999
 set long 90000

查看创建用户表的SQL

查看当前用户表的SQL 
select dbms_metadata.get_ddl('TABLE','EMPLOYEES') from dual; 
查看其他用表或索引的SQL

SELECT DBMS_METADATA.GET_DDL('TABLE','DEPT','SCOTT') FROM DUAL;

查看创建用户索引的SQL 
查看所需表的索引
 SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME from user_indexes WHERE table_name='EMP';
 查看当前用户索引的SQL
 select dbms_metadata.get_ddl('INDEX','PK_DEPT') from dual;

查看其他用户索引的SQL
  select dbms_metadata.get_ddl('INDEX','PK_DEPT','SCOTT‘) from dual; 
查看创建主键的SQL 
查看所需表的约束
 SQL> select owner, table_name, constraint_name, constraint_type from user_constraints where table_name='EMP';
 查看创建主键的SQL
 SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','EMP_PK') FROM DUAL; 
查看创建外键的SQL
 SQL> SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT','EMP_FK_DEPT') FROM DUAL; 
查看创建VIEW的语句 
查看当前用户视图的SQL
 SQL> SELECT dbms_metadata.get_ddl('VIEW', 'MY_TABLES')

查看其他用户视图的SQL
 SQL> SELECT dbms_metadata.get_ddl('VIEW', 'MY_TABLES','SCOTT‘) FROM DUAL; 
查看创建视图的SQL也可以
 SQL> select text from user_views where view_name=upper('&view_name'); 
DBMS_METADATA.GET_DDL的一些使用技巧 
1、得到一个用户下的所有表,索引,存储过程,函数的ddl 
SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
 FROM USER_OBJECTS u
 where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE','FUNCTION‘); 
2、得到所有表空间的ddl语句 
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
 FROM DBA_TABLESPACES TS; 
3、得到所有创建用户的ddl 
SELECT DBMS_METADATA.GET_DDL('USER',U.username)
 FROM DBA_USERS U; 
4、去除storage等多余参数 
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

常见错误

SQL> select dbms_metadata.get_ddl('TABLE','PC','SCOTT') from dual;
 ERROR:
 ORA-19206: Invalid value for query or REF CURSOR parameter
 ORA-06512: at "SYS.DBMS_XMLGEN", line 83
 ORA-06512: at "SYS.DBMS_METADATA", line 345
 ORA-06512: at "SYS.DBMS_METADATA", line 410
 ORA-06512: at "SYS.DBMS_METADATA", line 449
 ORA-06512: at "SYS.DBMS_METADATA", line 615
 ORA-06512: at "SYS.DBMS_METADATA", line 1221
 ORA-06512: at line 1

no rows selected

解决办法:运行 $ORACLE_HOME/rdbms/admin/catmeta.sql

转载至:http://www.linuxidc.com/Linux/2012-12/76113.htm

Oracle利用dbms_metadata.get_ddl查看DDL语句的更多相关文章

  1. 利用dbms_metadata.get_ddl查看DDL语句

    http://www.cnblogs.com/aocle/archive/2011/10/13/2209790.html 当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metada ...

  2. oracle之 获取建表ddl语句

    第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...

  3. Oracle利用external table 查看trace文件

    1. 用下面的语句找到trace文件的路径 select * from v$diag_info where name='Default Trace File'; 2. 创建一个directory用来加 ...

  4. oracle利用触发器实现将ddl操作存入数据表中

    先创建DDL数据库事件操作表: create table ddl_event( sys_time date primary key, event_name ), ), obj_type ), obj_ ...

  5. Oracle与SQLSERVER 批处理执行 DDL 语句

    1. 公司里面的 很多同名的数据库 的一个表都错误的多了一个列 要是每个都用数据库连接工具打开 感觉太废时间了. 比如写个sql命令来执行. 具体方法: Oracle 使用 sqlplus sqlpl ...

  6. Oracle SQL Lesson (10) - 使用DDL语句创建和管理表

    数据库对象TableViewSequenceIndexSynonym 对象名称最长30个字符,不能与当前用户下其他对象重名.create table "select" as sel ...

  7. oracle使用dbms_metadata包取得所有对象DDL语句

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  8. Oracle中的dbms_metadata.get_ddl的用法

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  9. dbms_metadata.get_ddl的用法(DDL)

    dbms_metadata包中的get_ddl函数 --GET_DDL: Return the metadata for a single object as DDL. -- This interfa ...

随机推荐

  1. 【Windows 8】pid为4的system进程占用80端口的解决办法

    因为Apache无法启动的原因,用netstat命令查看了一下80端口是否被占用了,如下: C:\Users\Maple>netstat -ano | findstr TCP LISTENING ...

  2. 从零开始制作jffs2文件系统

    JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用. 1.       安装mkfs工具 MTD主页:htt ...

  3. Windows Azure功能更新:SQL Server AlwaysOn和Notification Hub 正式商用

    一周以前Windows Azure发布了新的更新内容,主要的更新有3项: 虚拟机上的SQL Server支持AlwaysOn可用性组了 Notification Hub商用 自动缩放支持时间策略 这里 ...

  4. 执行计划之CONCATENATION

    CREATE TABLE T_CONCAT (ID NUMBER, NAME VARCHAR2(30), TYPE VARCHAR2(30)); INSERT INTO T_CONCAT SELECT ...

  5. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  6. 二:java语法基础:

    1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9. ...

  7. 锐浪应用小插曲,asp.net下的使用

    下午提前完成了今天的工作内容,整了下bs中的应用,嘿嘿,其中遇到不少问题,接下来说下大概会遇到哪些问题,1:grid++ 6.0插件下载安装之后ie浏览器无法打开,居然什么都没有显示,奇葩啊,系统版本 ...

  8. DB2_001_MQT

    MQT stands for Materialed Query Table.它的定义是建立在查询结果之上的,把动态查询的结果放到表中,表中的数据随着基础表中数据的变化而变化.当基础表中的数据变化时,M ...

  9. Bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍 中位数,数学

    1696: [Usaco2007 Feb]Building A New Barn新牛舍 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 394  Solve ...

  10. Service的两种启动方法

    刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...