您当前的位置: 首页 >  oracle

Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?

发布时间:2018-04-13 15:11:20 ,浏览量:0

Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?

 QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_METADATA.GET_DDL包。

  • 使用如下的脚本即可导出某个用户下的存储过程代码到/tmp/a.sql文件中:

    SET PAGESIZE 0 SET TRIMSPOOL ON SET LINESIZE 10000 SET LONG 90000 SET FEEDBACK OFF SET FEED OFF; SET ECHO OFF spool /tmp/a.sql SELECT DBMS_METADATA.GET_DDL('PROCEDURE', U.OBJECT_NAME)||CHR(10)||'/'   FROM USER_OBJECTS U  WHERE OBJECT_TYPE = 'PROCEDURE';  spool OFF 

    打开文件后,简单处理一下即可。

    总体来说有两种方式来获取,第一,利用系统包DBMS_METADATA包中的GET_DDL函数来获取,第二,利用exp或expdp来获取。

    下面来看第一种方式,如何利用系统包DBMS_METADATA包中的GET_DDL函数来获取对象的定义语句。下面是该函数的入参和出参:

    SQL> DESC DBMS_METADATA.GET_DDL

    PARAMETER   TYPE     MODE DEFAULT?

    ----------- -------- ---- --------

    (RESULT)    CLOB                  

    OBJECT_TYPE VARCHAR2 IN           

    NAME        VARCHAR2 IN           

    SCHEMA      VARCHAR2 IN   Y       

    VERSION     VARCHAR2 IN   Y       

    MODEL       VARCHAR2 IN   Y       

    TRANSFORM   VARCHAR2 IN   Y       

    其详细参数如下:

    l  NAME  对象名称

    l  VERSION  对象原数据的版本

    l  TRANSFORM  默认值为DDL

    l  查看创建表SQL语句:

    SELECT DBMS_METADATA.GET_DDL('TABLE','DEPT','SCOTT') FROM DUAL;

    SELECT DBMS_METADATA.GET_DDL('TABLE',U.TABLE_NAME) FROM USER_TABLES U;

    n  查看创建主键的SQL语句:

    SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','EMP_PK') FROM DUAL;

    n  查看创建视图(VIEW)的SQL语句:

    SELECT DBMS_METADATA.GET_DDL('VIEW', 'MY_TABLES','SCOTT') FROM DUAL;

    SELECT DBMS_METADATA.GET_DDL('VIEW', U.OBJECT_NAME)

      FROM USER_OBJECTS U

     WHERE OBJECT_TYPE = 'VIEW';

    SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME=UPPER('&VIEW_NAME');

    n  查看创建触发器(TRIGGER)的SQL语句:

    SELECT DBMS_METADATA.GET_DDL('TRIGGER', U.OBJECT_NAME)

      FROM USER_OBJECTS U

     WHERE OBJECT_TYPE = 'TRIGGER';

    n  查看创建包(PACKAGE)的SQL语句:

    SELECT DBMS_METADATA.GET_DDL('PACKAGE', U.OBJECT_NAME)

      FROM USER_OBJECTS U

     WHERE OBJECT_TYPE = 'PACKAGE';

    n  查看创建同义词(SYNONYM)的SQL语句:

    SELECT DBMS_METADATA.GET_DDL('SYNONYM', U.OBJECT_NAME)

      FROM USER_OBJECTS U

     WHERE OBJECT_TYPE = 'SYNONYM';

    n  查看创建角色(ROLE)的SQL语句:

    SELECT DBMS_METADATA.GET_DDL('ROLE', U.ROLE) FROM DBA_ROLES U;

    n  得到某个SCHEDULER JOB的创建语句:

    SELECT DBMS_METADATA.GET_DDL('PROCOBJ', D.JOB_NAME, D.OWNER)

      FROM DBA_SCHEDULER_JOBS D

     WHERE D.JOB_TYPE = 'STORED_PROCEDURE'

       AND D.STATE = 'SCHEDULED'

       AND D.SCHEDULE_NAME IS NULL;

    n

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0524s