Создание внешних ключей

Из найденого в черновиках. Данный скрипт применялся для докручивания БД, где внешнии ключи отсутствовали как класс
и связи между таблицами строились на основе наименования полей.

declare
  vSQL varchar2(2000);
  vi number;
begin
  vi := 1;
for c in (
select a.table_name, a.column_name, b.table_name pk_table
  from user_tab_columns a,
       user_constraints b,
       user_ind_columns c
  where (a.column_name like 'KD_%' or (a.column_name like 'ID_%' and a.column_name!='ID_USR'))
    and not exists (select 1 from user_constraints b1, user_ind_columns c1
                      where b1.table_name=a.table_name and b1.constraint_type='P' and c1.index_name=b1.index_name
                        and c1.column_name=a.column_name)
    and b.constraint_type='P' and b.table_name!=a.table_name and b.index_name=c.index_name
    and c.column_name = a.column_name) loop
    begin
      vSQL:='create index '||c.table_name||'_i'||to_char(vi)||' on '||c.table_name||' ('||c.column_name||')';
      execute immediate vSQL;
      vi:=vi+1;
    exception
      when others then
        null;
    end;
    begin
      vSQL:='alter table '||c.table_name||' add constraint '||c.table_name||'_fk'||to_char(vi)||' foreign key ('||c.column_name||') '||
            'references '||c.pk_table||' ('||c.column_name||')';
      execute immediate vSQL;
      vi:=vi+1;
    exception
      when others then
        dbms_output.put_line(c.table_name||c.column_name);
        dbms_output.put_line(vSQL);
    end;
end loop;
end;
Реклама
Запись опубликована в рубрике Uncategorized. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s