|
源代码网推荐
通过Oracle 9i的DBMS_METADATA包得到DLL语句
基本上用到的语法如下:
a.获取单个的建表和建索引的语法
set heading off; set echo off; set pages 999; set long 90000; spool dept.sql select dbms_metadata.get_ddl(table,dept,scott) from dual; select dbms_metadata.get_ddl(index,dept_idx,scott) from dual; spool off;
b.获取一个schema下的任何建表和建索引的语法,以scott为例:
set pagesize 0 set long 90000 set feedback off set echo off spool scott_schema.sql connect scott/tiger; 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;
c. 获取某个schema的建全部存储过程的语法
connect brucelau /brucelau; spool procedures.sql select dbms_metadata.get_ddl(procedure,u.object_name) from user_objects u where object_type = procedure; spool off;
另:
dbms_metadata.get_ddl(table,tab1,user1)
三个参数中,第一个指定导出ddl定义的对象类型(此例中为表类型),第二个是对象名(此例中即表名),第三个是对象所在的用户名。
从Oracle 9i开始Oracle提供了一个新的系统包DBMS_METADATA,可以用于提取对象创建的DDL语句 这个Package功能极其强大,我们来看看它的使用方法.
1.获得表的创建语句.
SQL> desc dbms_metadataFUNCTION ADD_TRANSFORM. RETURNS NUMBER...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.... SQL> set long 2000 SQL> select dbms_metadata.get_ddl("TABLE","TEST") from dual; DBMS_METADATA.GET_DDL("TABLE","TEST") -------------------------------------------------------------------------------- CREATE TABLE "SYS"."TEST" ( "OWNER" VARCHAR2(30), "OBJECT_NAME" VARCHAR2(128), "SUBOBJECT_NAME" VARCHAR2(30), "OBJECT_ID" NUMBER, "DATA_OBJECT_ID" NUMBER, "OBJECT_TYPE" VARCHAR2(18), "CREATED" DATE, "LAST_DDL_TIME" DATE, "TIMESTAMP" VARCHAR2(19), "STATUS" VARCHAR2(7), "TEMPORARY" VARCHAR2(1), "GENERATED" VARCHAR2(1), "SECONDARY" VARCHAR2(1) ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" SQL>
2.进一步的,可以通过dbms_metadata获得更全面的DDL语句
Oracle提供一个全面的范例:
$ORACLE_HOME/rdbms/demo/mddemo.sql
包括索引、授权、触发器等所有DDL语句都可以被提取。
有兴趣的可以参考该文件,按照Demo的例子进行测试
源代码网供稿. |