从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';
Comments
There are currently no comments
New Comment