как найти все записи во всех таблицах БД по условию?

Cookie
Дата: 07.06.2006 04:49:42
есть справочная таблица, и в нее случайно попали 2 одинаковые записи с разными идентификаторами
и уже наплодились ссылки на оба идентификатора
таблиц много, все просматривать долго
можно как то найти эти записи?
Падонак
Дата: 07.06.2006 05:05:18
зделай скрипт
который выберет из all_constraints все таблитсы, сцылающиеся на справочнег

в скрипте в них сделаешь селект,
и фсё
Cookie
Дата: 07.06.2006 05:12:24
как это? дай сцылку, плиз
только не туда, куда Elic обычно посылает
Падонак
Дата: 07.06.2006 05:51:17
друк,
ты будешь смеятцо,
но я не поленилсо, накатал тебе скриптъ

declare 
  i integer;
  vowner varchar2(30);
  vtable varchar2(30);
  nID number;
begin
  
  vowner := 'MARKET';
  vtable := 'CATEGORIES';
  nID := 24;
  

  for cur in (
    select c.table_name, cc.column_name
      from all_constraints c, all_constraints c2, all_cons_columns cc
      where c.owner = upper(vowner) and c.constraint_type = 'R'
      and c.r_constraint_name = c2.constraint_name and c2.table_name = upper(vtable)
      and cc.constraint_name = c.constraint_name
  ) loop
    
    execute immediate 'select count(*) from ' || vowner || '.' || cur.table_name || ' where ' || cur.column_name || ' = ' || nID into i;
    if i <> 0 then
      dbms_output.put_line('Ф таблитсэ ' || cur.table_name || ' присуцтвуед ' || i || ' записей');
    end if;
  
  end loop;  
end;

vtable - твой справочнег
nID - ID твоей запеси, которую ты ищешъ


можешь скрипт передаладь сразу на update
Падонак
Дата: 07.06.2006 05:55:30
примерно так
declare 
  i integer;
  vowner varchar2(30);
  vtable varchar2(30);
  nID_old number;
  nID_new number;
begin
  
  vowner := 'MARKET';
  vtable := 'CATEGORIES';
  nID_old := 24;
  nID_new := 25;
  

  for cur in (
    select c.table_name, cc.column_name
      from all_constraints c, all_constraints c2, all_cons_columns cc
      where c.owner = upper(vowner) and c.constraint_type = 'R'
      and c.r_constraint_name = c2.constraint_name and c2.table_name = upper(vtable)
      and cc.constraint_name = c.constraint_name
  ) loop
    
    execute immediate 'update ' || vowner || '.' || cur.table_name || ' set ' || cur.column_name || ' = ' || nID_new || ' where ' || cur.column_name || ' = ' || nID_old;
    if sql%rowcount > 0 then
      dbms_output.put_line('Ф таблитсэ ' || cur.table_name || ' пропатчено ' || sql%rowcount || ' записей');
    end if;
  
  end loop;  
end;
Cookie
Дата: 07.06.2006 05:58:30
Падонак
друк,

тада уж падруга)

Падонак
друк,
ты будешь смеятцо,
но я не поленилсо, накатал тебе скриптъ

не, не смеятцо, а васхесчатца
спасибо
dmidek
Дата: 07.06.2006 12:18:39
Падонак
примерно так

Я вот этого места не понял. Это же ИМХО бизнес- логические дубли. Куда их еще апдейтовать ? Их наверно надо просто удалить ...