批量导出索引的创建语句

--新项目不知道哪个缺心眼建的同构库,只是见了表结构,并没有健非主键外的索引,领导让追加一版,以前只是会用视图拼sql创建,
--今天有学会一招oracle-9i以上版本可以使用
--导出的内容有点复杂需要用编辑器处理下并且替换一下实例名(schema)

SELECT substr(replace(to_char(DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)),'"',''),0,instr(replace(to_char(DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)),'"',''),') ',1))||';' createindexsql FROM USER_OBJECTS u where U.OBJECT_TYPE = 'INDEX';

--这个可能用报错,可能有那种表和索引所属的实例不是一个用户,所以owner一定要写的完善一些
SELECT replace(TO_CHAR(dbms_lob.substr(dbms_metadata.get_ddl('INDEX',INDEX_NAME)) || ';'),'"','') 
   from dba_indexes a
  WHERE a.TABLE_TYPE = 'TABLE'
    and a.OWNER = 'GISDATA'
    and NOT EXISTS (SELECT 'x'
           FROM dba_constraints b
          WHERE a.OWNER = b.OWNER
            and a.INDEX_NAME = b.CONSTRAINT_NAME
            and b.CONSTRAINT_TYPE = 'P');--不包括主键 

猜你喜欢

转载自www.cnblogs.com/heyt/p/11582056.html
今日推荐