Oracle DBMS_METADATA抽取创建对象的DDL

(0 comments)

从Oracle 9i开始,Oracle通过包DBMS_METADATA提供了和对象创建层交互的API。利用这个包可以轻松的抽取相关对象的DDL。例如,查询一个表的DDL:

select dbms_metadata.get_ddl ('TABLE', 'DEPT', 'SCOTT') from dual;

第一个参数指定对象类型是表,第二个参数指定对象(表)名称,对象名要求大写,第三个参数指定模式(schema)。模式参数可以不给出,默认是当前模式。

在SQL*Plus中执行时,将参数serveroutput设置为on,将语句如下:

set heading off;
set echo off;
set pages 999;
set long 90000;

spool ddl_list.sql

select dbms_metadata.get_ddl('TABLE','DEPARTMENTS','HR') from dual;
select dbms_metadata.get_ddl('INDEX','DEPT_ID_PK','HR') from dual;

spool off

上面查出来的DDL结果似乎太过详细了,可能您并不想要Storage/FREELIST之类的语句,通过下面语句,在结果中去掉与存储相关的信息:

DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);

下面的例子获得某个用户的全部SCHEMA,语句如下:

set pagesize 0
set long 90000
set feedback off
set echo off 

spool hr_schema.sql 

connect hr/hr;

SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
   FROM USER_TABLES u;

SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
   FROM USER_INDEXES u;spool off;

有时候,在查询时需要添加查询条件,语句如下:

SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
   FROM USER_ALL_TABLES u
   WHERE u.nested='NO' 
   AND (u.iot_type is null or u.iot_type='IOT');

查看一个package 或 procedure 内容

select text from user_source where name like 'AX_EXTERN';
Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required