广告
返回顶部
首页 > 资讯 > 数据库 >oracle批量添加指定表前缀的索引SQL语句
  • 775
分享到

oracle批量添加指定表前缀的索引SQL语句

oracle批量添加指定表前缀的索引SQL语句 2017-07-16 00:07:52 775人浏览 才女
摘要

需要输入用户名,表空间,索引个数,表名前缀,过滤的表名后缀 declare --用户名 userName varchar2(50) :="snsrm"; --表空间 tablespaceName v

oracle批量添加指定表前缀的索引SQL语句

需要输入用户名,表空间,索引个数,表名前缀,过滤的表名后缀
declare
  --用户名
  userName varchar2(50) :="snsrm";
  --表空间
  tablespaceName varchar2(50) :="APPS_TS_TX_IDX";
  --索引个数
  rowN number :=3;
  --过滤表名后缀,该表不添加索引
  tableLastName varchar2(10) :=upper("_temp");
  tableLastName1 varchar2(10) :=upper("_te");
  --表名前缀
  cursor vdata is select t.table_name from user_tables t where t.TABLE_NAME like upper("SRM_POS%") 
  and t.TABLE_NAME not like "%"||tableLastName 
  and t.TABLE_NAME not like "%"||tableLastName1
  order by t.TABLE_NAME;
  --声明变量,记录一行数
  v vdata%rowtype;
  n number;
  --索引名,限制最大程度为30字符
  indexName varchar2(30);
  temp varchar2(27);
  k number;
begin
     --打开游标
   open vdata;
   --循环遍历取数据
   loop
     fetch vdata into v;
     exit when vdata%NOTFOUND;
     select count(*) into n from user_ind_columns t where t.TABLE_NAME=upper(v.table_name);
     if n27 then
          temp := substr(v.table_name,0,27);
       else
          temp := v.table_name;
       end if;
       indexName := temp||"_N"||k;
       for cur in (select t.column_name,t.comments,t.TABLE_NAME from all_col_comments t where  t.table_name = upper(v.table_name) ---表名 
          and instr(lower(t.column_name), "attribute") = 0
          and instr(lower(t.COLUMN_NAME),"last_update") = 0
          and instr(lower(t.COLUMN_NAME),"version_num") = 0
          and instr(lower(t.COLUMN_NAME),"created_by") = 0
          and instr(lower(t.COLUMN_NAME),"creation_date") = 0 
          and rownum<=rowN) loop
          --判断该字段是否已经创建索引
          select count(*) into n from user_ind_columns t where t.TABLE_NAME=upper(v.table_name) and t.COLUMN_NAME=upper(cur.column_name);
          --未创建索引
          if n<1 then
            --判断索引名是否存在
            select count(*) into n from user_ind_columns t where t.INDEX_NAME=indexName;
            while n>0 loop
              k := k+1;
              indexName := temp||"_N"||k;
              select count(*) into n from user_ind_columns t where t.INDEX_NAME=indexName;
            end loop;
            --打印创建索引语句
            dbms_output.put_line("Create Index "||userName||"."||indexName||" ON "||userName||"."||cur.table_name||"("||cur.column_name||")"||" tablespace "||tablespaceName||";");
            k := k+1;
            indexName := temp||"_N"||k;
          end if;
        end loop;
     end if;
   end loop;  
   --关闭游标
   close vdata;   
end;

 

您可能感兴趣的文档:

--结束END--

本文标题: oracle批量添加指定表前缀的索引SQL语句

本文链接: https://www.lsjlt.com/news/6055.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作