Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Запрос для поиска неиндексированных FK-ключей : Oracle

29.03.2024 4:09


09.07.2018 11:16
OlegON
 
Не мое, для памяти
SQL код:
select
  
'create index '||s.owner||'.'||
  case 
when length(s.new_idx_name) <= 30 then s.new_idx_name
    
else case when length(s.constraint_name) <= 28 then s.constraint_name||'_i'
      
else s.constraint_name end end ||
  
' on '||s.owner||'.'||s.table_name||'('||s.columnsa||') tablespace &IND_TBS;' cmd
s.*
from 
(
  
select decodeb.table_namenull'****''ok' Statusa.owner
       
a.table_namea.columns columnsab.columns columnsba.constraint_name
       
a.table_name||'_'||replace(a.columns,', ','_')||'_i ' new_idx_name
  from 
  
select a.owner,
           
substr(a.table_name,1,30table_name
           
substr(a.constraint_name,1,30constraint_name
           
max(decode(position1,     substr(column_name,1,30),null)) || 
           
max(decode(position2,', '||substr(column_name,1,30),null)) || 
           
max(decode(position3,', '||substr(column_name,1,30),null)) || 
           
max(decode(position4,', '||substr(column_name,1,30),null)) || 
           
max(decode(position5,', '||substr(column_name,1,30),null)) || 
           
max(decode(position6,', '||substr(column_name,1,30),null)) || 
           
max(decode(position7,', '||substr(column_name,1,30),null)) || 
           
max(decode(position8,', '||substr(column_name,1,30),null)) || 
           
max(decode(position9,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,10,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,11,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,12,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,13,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,14,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,15,', '||substr(column_name,1,30),null)) || 
           
max(decode(position,16,', '||substr(column_name,1,30),null)) columns
      from dba_cons_columns a
dba_constraints b
     where a
.constraint_name b.constraint_name
       
and b.constraint_type 'R'
     
group by a.ownersubstr(a.table_name,1,30), substr(a.constraint_name,1,30) ) a
  ( 
select table_owner ownersubstr(table_name,1,30table_namesubstr(index_name,1,30index_name
           
max(decode(column_position1,     substr(column_name,1,30),NULL)) || 
           
max(decode(column_position2,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position3,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position4,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position5,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position6,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position7,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position8,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position9,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,10,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,11,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,12,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,13,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,14,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,15,', '||substr(column_name,1,30),NULL)) || 
           
max(decode(column_position,16,', '||substr(column_name,1,30),NULL)) columns
      from dba_ind_columns 
     group by table_owner
substr(table_name,1,30), substr(index_name,1,30) ) b
  where a
.owner b.owner (+)
    and 
a.table_name b.table_name (+)
    and 
b.columns (+) like a.columns || '%' 
s
where status 
<> 'ok' and owner '&OWNER' 
Часовой пояс GMT +3, время: 04:09.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.