Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как найти все записи во всех таблицах БД по условию?  [new]
Cookie
Member

Откуда:
Сообщений: 37
есть справочная таблица, и в нее случайно попали 2 одинаковые записи с разными идентификаторами
и уже наплодились ссылки на оба идентификатора
таблиц много, все просматривать долго
можно как то найти эти записи?
7 июн 06, 04:49    [2747593]     Ответить | Цитировать Сообщить модератору
 Re: как найти все записи во всех таблицах БД по условию?  [new]
Падонак
Member [заблокирован]

Откуда: из лесу
Сообщений: 1775
зделай скрипт
который выберет из all_constraints все таблитсы, сцылающиеся на справочнег

в скрипте в них сделаешь селект,
и фсё
7 июн 06, 05:05    [2747597]     Ответить | Цитировать Сообщить модератору
 Re: как найти все записи во всех таблицах БД по условию?  [new]
Cookie
Member

Откуда:
Сообщений: 37
как это? дай сцылку, плиз
только не туда, куда Elic обычно посылает
7 июн 06, 05:12    [2747601]     Ответить | Цитировать Сообщить модератору
 Re: как найти все записи во всех таблицах БД по условию?  [new]
Падонак
Member [заблокирован]

Откуда: из лесу
Сообщений: 1775
друк,
ты будешь смеятцо,
но я не поленилсо, накатал тебе скриптъ

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
7 июн 06, 05:51    [2747613]     Ответить | Цитировать Сообщить модератору
 Re: как найти все записи во всех таблицах БД по условию?  [new]
Падонак
Member [заблокирован]

Откуда: из лесу
Сообщений: 1775
примерно так
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;
7 июн 06, 05:55    [2747616]     Ответить | Цитировать Сообщить модератору
 Re: как найти все записи во всех таблицах БД по условию?  [new]
Cookie
Member

Откуда:
Сообщений: 37
Падонак
друк,

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

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

не, не смеятцо, а васхесчатца
спасибо
7 июн 06, 05:58    [2747619]     Ответить | Цитировать Сообщить модератору
 Re: как найти все записи во всех таблицах БД по условию?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116202
Падонак
примерно так

Я вот этого места не понял. Это же ИМХО бизнес- логические дубли. Куда их еще апдейтовать ? Их наверно надо просто удалить ...
7 июн 06, 12:18    [2748817]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить