浅谈DBMS_METADATA.GET_DDL使用

我们可以通过DBMS_METADATA.GET_DDL函数取得对象的创建语法,这在很多性能调优的场合中需要用到。
引用
SQL> desc DBMS_METADATA
...
FUNCTION GET_DDL RETURNS CLOB
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_TYPE                    VARCHAR2                IN
NAME                           VARCHAR2                IN
SCHEMA                         VARCHAR2                IN     DEFAULT
VERSION                        VARCHAR2                IN     DEFAULT
MODEL                          VARCHAR2                IN     DEFAULT
TRANSFORM                      VARCHAR2                IN     DEFAULT
...

OBJECT_TYPE:表示对象类型,可以是表格,索引,视图,物化视图,存储过程等,获得存储过程方法可以参考metalink doc [ID 468760.1]
NAME:对象名
SCHEMA:对象所在用户名

以下是取得索引创建语法例子
引用
set heading off
set echo off
set flush off
set pagesize 9999
set linesize 9999
set long 9999
spool rcindscr.sql
select 'select dbms_metadata.get_ddl("INDEX", "'||index_name||'", "'||owner||'") from dual;'
from dba_indexes where tablespace_name='EXAMPLE' and index_name like 'E%';
spool off

CREATE UNIQUE INDEX "HR"."EMP_EMAIL_UK" ON "HR"."EMPLOYEES" ("EMAIL")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/

如果不想在语法中出现STORAGE属性,可以在会话级别中设置
引用
SET LONG 2000000
SET PAGESIZE 0
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
FROM USER_INDEXES u ;
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'DEFAULT');

你可能感兴趣的:(sql)