`

(转)利用dbms_metadata.get_ddl查看DDL语句

 
阅读更多

来源:http://www.cnblogs.com/aocle/archive/2011/10/13/2209790.html

当我们想要查看某个表或者是表空间的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

分享到:
评论

相关推荐

    [Oracle] dbms_metadata.get_ddl 的使用方法总结

    以下是对Oracle中dbms_metadata.get_ddl的用法进行了详细的分析介绍,需要的朋友参考下

    GBase 8t/8s/informix获取DDL函数DBMS-METADATA.GET-DDL

    GBase 8t/8s/informix获取DDL函数DBMS_METADATA.GET_DDL CREATE FUNCTION DBMS_METADATA.GET_DDL( object_type varchar(16) , name varchar(128), schema varchar(32) default null, v_version varchar(32) ...

    jf_Oracle_经典笔记.docx

    4. 利用dbms_metadata.get_ddl查看DDL语句 6 5. 数据库备份和恢复 9 6. user_objects 表 9 7. DBLink的使用 10 8. 查看表是否被截断过 13 9. ORA-01654 索引无法通过128(在表空间中XXX)扩张 14 10. SID和...

    oracle高级面试50问

    DBMS_METADATA.GET_DDL 包  6. 怎样查看数据库引擎的报错  解答:alert log.  7. 比较truncate和delete 命令  解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不...

    Oracle中轻松取得建表和索引的DDL语句

    我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的...在 Oracle 9i中,我们可以直接通过执行dbms_metadata从数据字典中查处DDL语句。使用这个功能强大的工具,我们可以获得单个对象或整个SCHEMA 的DDL语句。

    oracle-自动获得表所有DDL(有缺陷)

    通过PL/SQL 自己手动生成DDL,不过目前我只写了 表、主键、注释、索引。其他的分区、约束还没写。后期加上 缺陷:每个字段后面都有","需要手动剔除,修改过后的已上传,csdn中不知道怎么修改,只好重新上传

    Oracle9i取得建表和索引的DDL语句

    正在看的ORACLE教程是:Oracle9i取得建表和索引的DDL语句。...在Oracle 9i中,我们可以直接通过执行dbms_metadata从数据字典中查处DDL语句。使用这个功能强大的工具,我们可以获得单个对象或整个SCHEMA的DDL语句

    Oracle轻松取得建表和索引的DDL语句

    在Oracle 9i中,我们可以直接通过执行dbms_metadata从数据字典中查处DDL语句。使用这个功能强大的工具,我们可以获得单个对象或整个SCHEMA的DDL语句。最好不过的是因为它使用起来很简单。 1、获得单个表和索引DDL...

    Oracle 9i轻松取得建表和索引的DDL语句

    正在看的ORACLE教程是:Oracle 9i轻松取得建表和索引的DDL语句。...在Oracle 9i中,我们可以直接通过执行dbms_metadata从数据字典中查处DDL语句。使用这个功能强大的工具,我们可以获得单个对象或整个SCHEMA的DDL

    Oracle中提取和存储数据库对象的DDL

    从对象中提取DDL命令的普通方法涉及到的操作包括从这些对象中提取元数据,并把这些数据存储在内存中。文中介绍了Oracle 9.2提供了一个实现这样的功能的API:DBMS_METADATA程序包。

    Oracle sqldeveloper without jdk (win+linux)

    select dbms_metadata.get_ddl('TABLE',table_name , user ) from user_tables; You need to reload $ORACLE_HOME/rdbms/admin/catmeta.sql 2.3 If Snippets are not accessible You may have not done a clean ...

    YADAMU---Yet-Another-DAta-Migration-Utility:一个用于在Oracle,Postgres,MySQL MariaDB和Snowflake之间迁移数据的实用程序。 将数据以JSON和CSV格式从受支持的数据库转移到Amazon S3和Azure Blob存储

    对于同类Oracle迁移,将迁移DBMS_METADATA支持的所有架构对象。 对于同类Postgres,MySQL和SQL Server迁移或异构迁移,当前将DDL操作限制为表布局。 当前不支持索引和其他架构对象的迁移。 支持的数据库: Oracle ...

    读书笔记:《数据库系统概念》.pdf

    授权 授予不同的⽤户以不同的访问权限 DDL的输出存放在数据字典(data dictionary)中,其中包含了元数据(metadata). 元数据是数据的数据. 1.5 关系数据库 关系数据库 关系数据库基于关系模型,使⽤⼀系列表来表达数据...

Global site tag (gtag.js) - Google Analytics