`

利用dbms_metadata.get_ddl查看DDL语句

 
阅读更多

本文转载,原文地址为:http://czmmiao.iteye.com/blog/1004873

当我们想要查看某个表或者是表空间的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`是一个非常实用的包,它允许开发人员和管理员获取数据库对象的创建语句(DDL),这对于备份和恢复、迁移或者理解对象定义非常有帮助。下面我们将深入探讨`dbms_metadata.get...

    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) ...

    Oracle PL/SQL常用47个工具包

    38. **DBMS_METADATA.GET_DDL**: 获取数据库对象的DDL语句。 39. **DBMS_STATS.SET_TABLE_PREFS**: 设置表的统计收集偏好。 40. **DBMS_BACKUP_RESTORE**: 数据库备份和恢复工具。 41. **DBMS_CRYPTO.HASH**: ...

    从 Oracle数据库中导出SQL脚本.doc

    该语法使用 `dbms_metadata.get_ddl` 函数来获取指定表和索引的 DDL 定义,其中 `dbms_metadata.get_ddl` 函数的三个参数分别是对象类型、对象名和用户名。在上面的例子中,第一个参数是 `TABLE`,表示获取表的 DDL ...

    查询索引对应的表和列

    除了直接查询系统视图外,还可以利用Oracle的 `dbms_metadata.get_ddl` 包中的函数来获取索引的DDL(数据定义语言)语句,从而间接获取索引及其关联列的信息。这通常用于更复杂或自动化的需求,例如,当需要生成索引...

    获取oracle表空间脚本

    2. **使用`DBMS_METADATA.GET_DDL`函数获取表空间的DDL脚本**:通过将表空间名称传递给`GET_DDL`函数,可以得到创建该表空间所需的DDL语句。 3. **转换为字符串**:由于`DBMS_METADATA.GET_DDL`返回的是LOB类型,...

    Oracle储存过程包加解密实现

    解密过程与之类似,先用`DBMS_METADATA.GET_DDL`获取加密后的源代码,然后解密并使用`DBMS_METADATA.SET_DDL_TEXT`更新储存过程。 需要注意的是,尽管加密储存过程能提高安全性,但也增加了管理复杂性和潜在的风险...

    oracle sqlplus 中spool 的使用

    - `select dbms_metadata.get_ddl('TABLE', 'DEPT', 'SCOTT') from dual`:获取SCOTT模式下DEPT表的DDL语句。 - `select dbms_metadata.get_ddl('INDEX', 'DEPT_IDX', 'SCOTT') from dual`:获取SCOTT模式下DEPT_...

    oracle数据库对象导出脚本

    每一类对象都通过`SELECT DBMS_METADATA.GET_DDL`命令来获取其定义的DDL(Data Definition Language)语句。 例如,对于表和视图: ```sql SELECT DBMS_METADATA.GET_DDL(u.object_type, u.object_name) FROM user...

    Oracle内置包的使用方法.rar

    `DBMS_METADATA.GET_DDL`函数可以获取指定对象的创建语句。 5. **DBMS_ALERT**: 提供异步通知服务,当特定条件满足时,可以向指定的进程或用户发送警报。例如,`DBMS_ALERT.REGISTER`用于注册一个警报,`DBMS_ALERT...

    DM7系统包使用手册

    ddl := DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE', 'MY_SCHEMA'); DBMS_OUTPUT.PUT_LINE(ddl); END; ``` 以上是对DM7系统包使用手册中部分关键知识点的详细解读,希望能够帮助读者更好地理解和使用这些强大的...

    Oracle内置包_reference.rar

    10. **DBMS_METADATA** - 用于获取和操作数据库元数据,如DDL(数据定义语言)语句,用于生成表、索引等对象的定义。 这些内置包只是Oracle庞大功能库的一小部分,它们极大地扩展了数据库的能力,简化了许多复杂的...

    Oracle内置包的使用方法

    例如,你可以使用DBMS_METADATA.GET_DDL函数来获取表、索引或其他对象的创建语句,这对于备份、迁移或复制对象非常方便。 在性能优化方面,DBMS_PROFILER是一个强大的工具,它可以分析PL/SQL代码的执行性能。通过...

    oracle判断表名是否存在

    DBMS_METADATA.GET_DDL('TABLE', 'YOUR_TABLE_NAME', 'YOUR_SCHEMA', l_ddl); DBMS_OUTPUT.PUT_LINE('Table exists.'); EXCEPTION WHEN OTHERS THEN IF SQLCODE = -942 THEN DBMS_OUTPUT.PUT_LINE('Table does...

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

    在Oracle 9i及更高版本中,可以利用DBMS_METADATA包来直接从数据字典中提取这些语句,这大大简化了过去通过Export工具或者编写复杂查询脚本的方式来获取DDL的过程。 DBMS_METADATA是一个强大的PL/SQL包,它可以生成...

    Oracle 20 道面试题及答案.docx

    DESCRIBE 命令可以显示表的结构信息,而 DBMS_METADATA.GET_DDL 方法可以获取表的 DDL 语句。 索引 索引可以快速访问表中的数据块。bitmap 索引是一种特殊的索引类型,适合用于 Fact Table。 约束 主键和外键是...

    oracle fyunwrap (oracle对象解密工具)

    2. **提取二进制数据**:使用`DBMS_METADATA.GET_DDL`或`DBMS_METADATA.GET_DEPENDENT_DDL`等系统包,获取加密对象的DDL,其中包含了对象的二进制编码。 3. **运行FYunwrap**:将二进制数据输入到FYunwrap工具中,...

Global site tag (gtag.js) - Google Analytics