Можно ли запросом проверить содержимое всех справочников 
	   
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Вт Сен 08, 2015 14:15   Можно ли запросом проверить содержимое всех справочников | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Добрый день, коллеги
 
Можно ли запросом(ами) проверить содержимое всех справочников(а лучше и в иных местах) на предмет наличия скажем статически прописанного номера БИК или корр.счета
 
 
Запрос вида 
 
select * from sources a where a.text like '%01010101%'
 
ищет по исходникам, тут уже всё просмотрели
 
 
Нужно вытащить скажем из групп настроек, из настроек, любых иных, где есть такой текст | 
			 
		  | 
	 
	
		  | 
	 
	
		prankster Профи
 
  Вступление в Клуб: 22.08.2014
  | 
		
			
				 Вт Сен 08, 2015 14:46   Re: Можно ли запросом проверить содержимое всех справочников | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				 	  | Матвеев Евгений пишет: | 	 		  Добрый день, коллеги
 
Можно ли запросом(ами) проверить содержимое всех справочников(а лучше и в иных местах) на предмет наличия скажем статически прописанного номера БИК или корр.счета
 
 
Запрос вида 
 
select * from sources a where a.text like '%01010101%'
 
ищет по исходникам, тут уже всё просмотрели
 
 
Нужно вытащить скажем из групп настроек, из настроек, любых иных, где есть такой текст | 	  
 
 
При желании можно, только не запросом. Написать процедуру, которая пробежит по всему словарю, по всем строковым/мемо полям.. Долго конечно, но можно распараллелить. Только вот думаю не стоит..
 
 
Лучше все-таки обозначить возможные места, типа групп настроек, шаблонов документов, просто настроек и т.п., только в них искать. | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Вт Сен 08, 2015 15:03   Re: Можно ли запросом проверить содержимое всех справочников | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Цитата: | 	 		  
 
При желании можно, только не запросом. Написать процедуру, которая пробежит по всему словарю, по всем строковым/мемо полям.. Долго конечно, но можно распараллелить.
 
 | 	  
 
 
Как это можно сделать? | 
			 
		  | 
	 
	
		  | 
	 
	
		prankster Профи
 
  Вступление в Клуб: 22.08.2014
  | 
		
			
				 Вт Сен 08, 2015 15:22   Re: Можно ли запросом проверить содержимое всех справочников | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Матвеев Евгений пишет: | 	 		   	  | Цитата: | 	 		  
 
При желании можно, только не запросом. Написать процедуру, которая пробежит по всему словарю, по всем строковым/мемо полям.. Долго конечно, но можно распараллелить.
 
 | 	  
 
 
Как это можно сделать? | 	  
 
 
Писать проход по all_tab_columns (только по текстовым полям, брать только с размером большим длины БИКа), с составлением текста в clob, в тексте через union all объединять запросы этих полей из таблиц, с условием на вхождение. Обернуть циклом например, внутри которого вывод лога.
 
Потом динамикой формировать некий пакет/библиотеку из этого всего. Потом просто вызвать и читать лог.
 
 
Ну дальше полет фантазии    | 
			 
		  | 
	 
	
		  | 
	 
	
		prankster Профи
 
  Вступление в Клуб: 22.08.2014
  | 
		
			
				 Ср Сен 09, 2015 09:48   Re: Можно ли запросом проверить содержимое всех справочников | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				 	  | prankster пишет: | 	 		   	  | Матвеев Евгений пишет: | 	 		   	  | Цитата: | 	 		  
 
При желании можно, только не запросом. Написать процедуру, которая пробежит по всему словарю, по всем строковым/мемо полям.. Долго конечно, но можно распараллелить.
 
 | 	  
 
 
Как это можно сделать? | 	  
 
 
Писать проход по all_tab_columns (только по текстовым полям, брать только с размером большим длины БИКа), с составлением текста в clob, в тексте через union all объединять запросы этих полей из таблиц, с условием на вхождение. Обернуть циклом например, внутри которого вывод лога.
 
Потом динамикой формировать некий пакет/библиотеку из этого всего. Потом просто вызвать и читать лог.
 
 
Ну дальше полет фантазии    | 	  
 
 
Можно извращаться (pl/sql), например так:
 
 	  | Код: | 	 		  
 
declare
 
  clBody clob;
 
  type str_tbl_type is table of varchar2(200);
 
  tblStr str_tbl_type;
 
 
  procedure put_to_clob(p_text in varchar2) is
 
  begin
 
    dbms_lob.writeappend(clBody, length(p_text||chr(10)), p_text||chr(10));
 
  end;
 
 
begin
 
  dbms_lob.createtemporary(clBody, false);
 
 
  select 'select x.id,  ''' || c.class_id || ''', x.' || x.column_name || ', ''' ||
 
   x.column_name || ''' from ' || c.TABLE_NAME || ' x where x.' ||
 
   x.column_name || ' like ''%01010101%''' bulk collect
 
    into tblStr
 
    from all_tab_columns x, ibs.class_tables c
 
   where x.owner = 'IBS'
 
     and x.data_type in ('VARCHAR2')
 
     and x.TABLE_NAME = c.TABLE_NAME
 
     and x.DATA_LENGTH > 8
 
     and c.TABLE_NAME like 'Z#%';
 
 
  declare
 
    nCount number;
 
  begin
 
    nCount := tblStr.count;
 
    put_to_clob('create table TMP_SOME_TABLE(id, class_id, c_value, c_column) as select * from (');
 
    for i in 1 .. nCount loop
 
      put_to_clob(tblStr(i));
 
      if i < nCount then
 
        put_to_clob('union all');
 
      end if;
 
    end loop;
 
    put_to_clob(')');
 
  end;
 
  
 
  execute immediate clBody;
 
 
  dbms_lob.freetemporary(clBody);
 
  tblStr.delete;
 
end;
 
 | 	  
 
 
И спустя n дней проверить таблицу TMP_SOME_TABLE   
 
Не уверен, что работать будет (а точнее, что вообще закончит выполнение когда-нибудь, скорее вылезет что-то вроде "snapshot too old"), но раз уж начали копать в эту сторону.. 
 
 
Надежнее по небольшой порции таблиц в цикле обрабатывать, с возможностью повторного выполнения при исключительной ситуации (+ проверка, что класс еще не лежит в темповой таблице). | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Ср Сен 09, 2015 10:23    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Код: | 	 		  
 
  select 'select x.id,  ''' || c.class_id || ''', x.' || x.column_name || ', ''' || 
 
   x.column_name || ''' from ' || c.TABLE_NAME || ' x where x.' || 
 
   x.column_name || ' like ''%01010101%''' bulk collect 
 
    into tblStr 
 
    from all_tab_columns x, ibs.class_tables c 
 
   where x.owner = 'IBS' 
 
     and x.data_type in ('VARCHAR2') 
 
     and x.TABLE_NAME = c.TABLE_NAME 
 
     and x.DATA_LENGTH > 8 
 
     and c.TABLE_NAME like 'Z#%'; 
 
 | 	  
 
 
Просматриваются только поля типа 'VARCHAR2'
 
Я правильно понял?
 
 
Там же еще 250 прочих типов
 
 
 	  | Код: | 	 		  
 
select a.DATA_TYPE from all_tab_columns a group by a.DATA_TYPE
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		prankster Профи
 
  Вступление в Клуб: 22.08.2014
  | 
		
			
				 Ср Сен 09, 2015 10:39    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				 	  | Матвеев Евгений пишет: | 	 		   	  | Код: | 	 		  
 
  select 'select x.id,  ''' || c.class_id || ''', x.' || x.column_name || ', ''' || 
 
   x.column_name || ''' from ' || c.TABLE_NAME || ' x where x.' || 
 
   x.column_name || ' like ''%01010101%''' bulk collect 
 
    into tblStr 
 
    from all_tab_columns x, ibs.class_tables c 
 
   where x.owner = 'IBS' 
 
     and x.data_type in ('VARCHAR2') 
 
     and x.TABLE_NAME = c.TABLE_NAME 
 
     and x.DATA_LENGTH > 8 
 
     and c.TABLE_NAME like 'Z#%'; 
 
 | 	  
 
 
Просматриваются только поля типа 'VARCHAR2'
 
Я правильно понял?
 
 
Там же еще 250 прочих типов
 
 
 	  | Код: | 	 		  
 
select a.DATA_TYPE from all_tab_columns a group by a.DATA_TYPE
 
 | 	 
  | 	  
 
 
 
Остальные не нужны, думаю (очень сомневаюсь в использовании raw, clob и т.п. для этого):
 
 
 	  | Код: | 	 		  
 
select distinct a.DATA_TYPE from all_tab_columns a where a.TABLE_NAME in ('Z#MAIN_DOCUM', 'Z#CLIENT', 'Z#PATTERN', 'Z#FACT_OPER', 'Z#PROPERTIES', 'Z#FP_TUNE', 'Z#FP_TUNE_VAL', 'Z#PRODUCT', 'Z#PR_CRED')
 
 | 	  
 
 
1	NUMBER
 
2	DATE
 
3	VARCHAR2 | 
			 
		  | 
	 
	
		  | 
	 
	
		Матвеев Евгений Профи
 
  Вступление в Клуб: 31.01.2012
  | 
		
			
				 Ср Сен 09, 2015 10:42    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Согласен. Сегодня попробую, времени мало уже осталось, отпишусь по итогам.
 
К вечеру... Пока shablon_doc пытаюсь выгрузить | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |