zoukankan      html  css  js  c++  java
  • 基于DBMS_METADATA.GET_DDL函数批量导出索引的创建语句

    /* 首先要说的DBMS_METADATA.GET_DDL是个好函数呀!新项目不知道哪个缺心眼建的同构库,只是见了表结构,并没有健非主键外的索引,领导让追加一版,以前只是会用视图拼sql创建,今天有学会一招oracle-9i以上版本可以使用,导出的内容有点复杂需要用编辑器处理下并且替换一下实例名(schema),select TO_CHAR(DBMS_METADATA.GET_DDL('TABLE','T_LCPOL')) from dual; 第一个参数就是类型如index、table、function、等 第二个参数就是 typeName 出来的结果就是创建这个typeName的DDL语句了!注意大写,还有一点要注意的是务必是同一个实例(Sechema),不同所属会报错,如果是想要生成不同所属的内容需要添加第三个参数,可以添加第二个参数的Owner 例如select replace(to_char(DBMS_METADATA.GET_DDL('TABLE','DUAL','SYS')),'"','') from dual;  最下面有这个函数的具体实现*/
    --以下例子是用来批量生成索引的语句,不合适的格式需文本编辑器修正下。
    SELECT substr(replace(to_char(DBMS_METADATA.GET_DDL('INDEX', a.INDEX_NAME)),'"',''),0,instr(replace(to_char(DBMS_METADATA.GET_DDL('INDEX',a.INDEX_NAME)),'"',''),') ',1)) || ';' createindexsql
      from dba_indexes a
     WHERE a.TABLE_TYPE = 'TABLE'
       and a.TABLE_OWNER = 'GIS'
       and a.OWNER = 'GIS'
       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') order by 1;
    --单纯用视图拼接sql; 两者可一比较下哪个更适合
    SELECT TABLE_OWNER,'Create index '||b.INDEX_NAME||' on '||
           b.TABLE_OWNER||'.'||
           b.TABLE_NAME||'('||
           listagg(a.COLUMN_NAME, ',') within group(ORDER by a.TABLE_NAME)||');'
      FROM user_ind_columns a, user_indexes b
     WHERE a.INDEX_NAME = b.INDEX_NAME and 
     NOT EXISTS (SELECT 'x'
               FROM user_constraints c WHERE 
                 b.INDEX_NAME = c.CONSTRAINT_NAME
                and c.CONSTRAINT_TYPE = 'P') --不包括主键 
     GROUP BY b.INDEX_NAME, b.TABLE_OWNER, b.TABLE_NAME ORDER BY 1;
    --DBMS_METADATA.GET_DDL函数的具体实现
      FUNCTION get_ddl (
                    object_type     IN  VARCHAR2,
                    name            IN  VARCHAR2,
                    schema          IN  VARCHAR2 DEFAULT NULL,
                    version         IN  VARCHAR2 DEFAULT 'COMPATIBLE',
                    model           IN  VARCHAR2 DEFAULT 'ORACLE',
                    transform       IN  VARCHAR2 DEFAULT 'DDL')
            RETURN CLOB; 
    
     
  • 相关阅读:
    JavaScript 进阶篇的学习~
    JavaScript 基础的复习~
    JVM字节码解析
    Tomcat压力测试与优化方案
    Tomcat优化
    JVM垃圾收集器
    JVM的垃圾回收机制(GC)
    JVisual VM工具使用
    jstack监控JVM线程的运行情况
    监控JVM内存使用情况
  • 原文地址:https://www.cnblogs.com/heyt/p/11582056.html
Copyright © 2011-2022 走看看