Oracle 查询当前用户下所有索引(Index)并拼接创建脚本

 Oracle 查询当前用户下所有索引(Index,PK)并拼接创建脚本【不包含FUNCTION-BASED基于函数的索引】

SELECT T.TABLE_NAME, --表名
       T.INDEX_NAME, --索引名
       I.UNIQUENESS, --是否非空
       I.INDEX_TYPE, --索引类型
       C.CONSTRAINT_TYPE, --键类型
       WM_CONCAT(T.COLUMN_NAME) COLS,
       (CASE
         WHEN C.CONSTRAINT_TYPE = 'P' OR C.CONSTRAINT_TYPE = 'R' THEN --主键和外键创建脚本拼接
          'ALTER TABLE ' || T.TABLE_NAME || ' ADD CONSTRAINT ' ||
          T.INDEX_NAME || (CASE
            WHEN C.CONSTRAINT_TYPE = 'P' THEN
             ' PRIMARY KEY ('
            ELSE
             ' FOREIGN KEY ('
          END) || WM_CONCAT(T.COLUMN_NAME) || ');'
         ELSE --索引创建脚本拼接
          'CREATE ' || (CASE
            WHEN I.UNIQUENESS = 'UNIQUE' THEN
             I.UNIQUENESS || ' '
            ELSE
             CASE
               WHEN I.INDEX_TYPE = 'NORMAL' THEN
                ''
               ELSE
                I.INDEX_TYPE || ' '
             END
          END) || 'INDEX ' || T.INDEX_NAME || ' ON ' || T.TABLE_NAME || '(' ||
          WM_CONCAT(COLUMN_NAME) || ');'
       END) SQL_CMD --拼接创建脚本
  FROM USER_IND_COLUMNS T, USER_INDEXES I, USER_CONSTRAINTS C
 WHERE T.INDEX_NAME = I.INDEX_NAME
   AND T.INDEX_NAME = C.CONSTRAINT_NAME(+)
   AND T.TABLE_NAME LIKE 'TB_%' --自建表规则(只查询自己创建的表【我的建表规则以TB_开头】,排除系统表)
   AND I.INDEX_TYPE != 'FUNCTION-BASED NORMAL' --排除基于函数的索引
 GROUP BY T.TABLE_NAME,
          T.INDEX_NAME,
          I.UNIQUENESS,
          I.INDEX_TYPE,
          C.CONSTRAINT_TYPE;

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值