DBMS_METADATA.GET_DDL使用范例

oracle中提供了系统包来提取对象的DDL语句,使用比较简单,不妨参考[1,2,3]。使用过程中,经常发现调用会出错,具体原因就不深究了,估计是跟数据字典有关系。

  1. -- 创建临时表,保存对象的ddl语句
  2. CREATE TABLE lcm_ddl
  3. (
  4.     owner          VARCHAR2(30),
  5.     object_name    VARCHAR2(30),
  6.     object_type    VARCHAR2(19),
  7.     ddl_stmt       CLOB
  8. );
  9. --TRUNCATE TABLE lcm_ddl;
  10. -- 关闭或打开ddl语句中的STORAGE子句
  11. DECLARE
  12.    v_ddl_stmt      CLOB;
  13. BEGIN
  14.      DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE);  ---去除storage等多余参数
  15. END;
  16. -- 遍历每个用户对象,生成ddl语句
  17. DECLARE
  18.    v_ddl_stmt      CLOB;
  19. BEGIN
  20.     FOR cur IN (SELECT * 
  21.         FROM ALL_OBJECTS
  22.         WHERE 1 = 1
  23.         AND OWNER = 'TA'
  24.         AND object_name NOT LIKE 'BIN$%') LOOP -- 去除10g回收站内对象
  25.         BEGIN
  26.             v_ddl_stmt := DBMS_METADATA.GET_DDL(cur.object_type, cur.object_name, cur.owner);
  27.             
  28.         EXCEPTION
  29.             WHEN OTHERS THEN
  30.                 v_ddl_stmt := SQLERRM;
  31.         END;
  32.         INSERT INTO lcm_ddl(owner, object_name, object_type, ddl_stmt)
  33.         VALUES (cur.owner, cur.object_name, cur.object_type, v_ddl_stmt);
  34.     END LOOP;
  35.     
  36.     COMMIT;
  37. END;

[1] oracle9i在线文档,http://www.dbanotes.net/Oracle/DBMS_METADATA_DDL.htm

[2] Fenng大牛的博客,http://www.dbanotes.net/Oracle/DBMS_METADATA_DDL.htm

[3] huaihe0410博客,http://blog.chinaunix.net/u2/60332/showart.php?id=471335

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值