Oracle中检查外键是否有索引的SQL脚本分享

复制代码 代码如下:

column columns format a30 word_wrapped

column tablename format a15 word_wrapped

column constraint_name format a15 word_wrapped

select table_name,

       constraint_name,

       cname1 || nvl2(cname2, ‘,’ || cname2, null) ||

       nvl2(cname3, ‘,’ || cname3, null) ||

       nvl2(cname4, ‘,’ || cname4, null) ||

       nvl2(cname5, ‘,’ || cname5, null) ||

       nvl2(cname6, ‘,’ || cname6, null) ||

       nvl2(cname7, ‘,’ || cname7, null) ||

       nvl2(cname8, ‘,’ || cname8, null) columns

  from (select b.table_name,

               b.constraint_name,

               max(decode(position, 1, column_name, null)) cname1,

               max(decode(position, 2, column_name, null)) cname2,

               max(decode(position, 3, column_name, null)) cname3,

               max(decode(position, 4, column_name, null)) cname4,

               max(decode(position, 5, column_name, null)) cname5,

               max(decode(position, 6, column_name, null)) cname6,

               max(decode(position, 7, column_name, null)) cname7,

               max(decode(position, 8, column_name, null)) cname8,

               count(*) col_cnt

          from (select substr(table_name, 1, 30) table_name,

                       substr(constraint_name, 1, 30) constraint_name,

                       substr(column_name, 1, 30) column_name,

                       position

                  from user_cons_columns) a,

               user_constraints b

         where a.constraint_name = b.constraint_name

           and b.constraint_type = ‘r’

         group by b.table_name, b.constraint_name) cons

 where col_cnt > all

 (select count(*)

          from user_ind_columns i

         where i.table_name = cons.table_name

           and i.column_name in (cname1, cname2, cname3, cname4, cname5,

                cname6, cname7, cname8)

           and i.column_position <= cons.col_cnt

         group by i.index_name)

/

在上面的基础上修改了一下,可以检查所有的用户。


复制代码 代码如下:

set linesize 400;

column owner format a10 word_wrapped

column columns format a30 word_wrapped

column table_name format a15 word_wrapped

column constraint_name format a40 word_wrapped

select owner,

     table_name,

       constraint_name,

       cname1 || nvl2(cname2, ‘,’ || cname2, null) ||

       nvl2(cname3, ‘,’ || cname3, null) ||

       nvl2(cname4, ‘,’ || cname4, null) ||

       nvl2(cname5, ‘,’ || cname5, null) ||

       nvl2(cname6, ‘,’ || cname6, null) ||

       nvl2(cname7, ‘,’ || cname7, null) ||

       nvl2(cname8, ‘,’ || cname8, null) columns

  from (select b.owner,b.table_name,

               b.constraint_name,

               max(decode(position, 1, column_name, null)) cname1,

               max(decode(position, 2, column_name, null)) cname2,

               max(decode(position, 3, column_name, null)) cname3,

               max(decode(position, 4, column_name, null)) cname4,

               max(decode(position, 5, column_name, null)) cname5,

               max(decode(position, 6, column_name, null)) cname6,

               max(decode(position, 7, column_name, null)) cname7,

               max(decode(position, 8, column_name, null)) cname8,

               count(*) col_cnt

          from (select substr(table_name, 1, 30) table_name,

                       substr(constraint_name, 1, 30) constraint_name,

                       substr(column_name, 1, 30) column_name,

                       position

                  from dba_cons_columns where owner not in (‘sys’,’system’,’sysman’,’hr’,’oe’,’exfsys’,’dbsnmp’,’mdsys’,’olapsys’,’scott’,’exfsys’,’sh’,’pm’,’ctxsys’)) a,

               dba_constraints b

         where a.constraint_name = b.constraint_name

           and b.constraint_type = ‘r’

         group by b.owner,b.table_name, b.constraint_name) cons

 where col_cnt > all

 (select count(*)

          from dba_ind_columns i

         where i.table_name = cons.table_name and i.table_owner=cons.owner

           and i.column_name in (cname1, cname2, cname3, cname4, cname5,

                cname6, cname7, cname8)

           and i.column_position <= cons.col_cnt

         group by i.index_name)

/

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐