Модификатор в качестве параметра функции 
	   
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		jamil Участник - экстремал
 
  Вступление в Клуб: 11.08.2014
  | 
		
			
				 Пн Сен 22, 2014 08:04   Модификатор в качестве параметра функции | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Можно ли использовать модификатор(pragma macro) в качестве параметра функции и как это сделать? | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Пн Сен 22, 2014 09:04   Re: Модификатор в качестве параметра функции | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | jamil пишет: | 	 		  | Можно ли использовать модификатор(pragma macro) в качестве параметра функции и как это сделать? | 	  
 
 
Макрос выполняется на этапе компиляции.
 
 
Функция выполняется на этапе, когда пользователь кнопку нажмёт.
 
 
Так что получается, что вы делаете что-то из:
 
1. передаёте статичный результат макроса, отработавшего несколько дней/месяцев/лет назад. В чём тогда вопрос?
 
 
2. передаёте строку, содержащую инструкции к получению данных (макрос). В этом случае функция должна уметь разобрать (скомпилировать) эту строку и поместить результат туда, куда надо.
 
А смысл?
 
 
В общем, имхо, выбранное решение не из лучших. Не смотрите на решение, смотрите на задачу.
 
В чём состоит изначальная задача? | 
			 
		  | 
	 
	
		  | 
	 
	
		jamil Участник - экстремал
 
  Вступление в Клуб: 11.08.2014
  | 
		
			
				 Пн Сен 22, 2014 09:28    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				задача состоит в том чтобы определить кредиты у которых проблемы с залогом
 
например для определенного сектора кредитования, с определенным сроком, определенной суммой кредита существуют соответствующие  требования к количеству поручителей и проценту залога
 
 так вот я хочу создать для каждого сектора  макро переменную с текстом условия (типа pragma MACRO(sektor1,"srok>0 and srok<12 and prczalog<130") ) и использовать эти переменные как параметр функции | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Пн Сен 22, 2014 10:43    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | jamil пишет: | 	 		  задача состоит в том чтобы определить кредиты у которых проблемы с залогом
 
например для определенного сектора кредитования, с определенным сроком, определенной суммой кредита существуют соответствующие  требования к количеству поручителей и проценту залога
 
 так вот я хочу создать для каждого сектора  макро переменную с текстом условия (типа pragma MACRO(sektor1,"srok>0 and srok<12 and prczalog<130") ) и использовать эти переменные как параметр функции | 	  
 
 
всё равно непонятно.
 
 
То есть вы хотите написать примерно следующий текст:
 
 	  | Код: | 	 		  
 
pragma macro (sector1, 'srok>0 and srok<12 and prczalog<130');
 
pragma macro (sector2, '1=1');
 
 
if выполняется условие для сектора 1 then
 
  func_process(sector1);
 
elsif выполняется условие для сектора 2 then
 
  func_process(sector2);
 
else
 
  pragma error('Не удаётся определить сектор');
 
end if;
 
 | 	  
 
 
?
 
 
И вы хотите в функции каким-то образом параметр встроить в запрос условием, так? | 
			 
		  | 
	 
	
		  | 
	 
	
		jamil Участник - экстремал
 
  Вступление в Клуб: 11.08.2014
  | 
		
			
				 Пн Сен 22, 2014 11:06    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Random пишет: | 	 		  
 
То есть вы хотите написать примерно следующий текст:
 
 	  | Код: | 	 		  
 
pragma macro (sector1, 'srok>0 and srok<12 and prczalog<130');
 
pragma macro (sector2, '1=1');
 
 
if выполняется условие для сектора 1 then
 
  func_process(sector1);
 
elsif выполняется условие для сектора 2 then
 
  func_process(sector2);
 
else
 
  pragma error('Не удаётся определить сектор');
 
end if;
 
 | 	  
 
 
?
 
 
И вы хотите в функции каким-то образом параметр встроить в запрос условием, так? | 	  
 
 
да, примерно так | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Пн Сен 22, 2014 11:18    | 
				     | 
			 
			
				Полезность: 1 
  | 
			 
			
				 	  | jamil пишет: | 	 		   	  | Random пишет: | 	 		  
 
То есть вы хотите написать примерно следующий текст:
 
 	  | Код: | 	 		  
 
pragma macro (sector1, 'srok>0 and srok<12 and prczalog<130');
 
pragma macro (sector2, '1=1');
 
 
if выполняется условие для сектора 1 then
 
  func_process(sector1);
 
elsif выполняется условие для сектора 2 then
 
  func_process(sector2);
 
else
 
  pragma error('Не удаётся определить сектор');
 
end if;
 
 | 	  
 
 
?
 
 
И вы хотите в функции каким-то образом параметр встроить в запрос условием, так? | 	  
 
 
да, примерно так | 	  
 
 
Идея в целом хорошая. Она приходит в том или ином виде к почти каждому программисту. Вот только она немного не так реализовывается...
 
 
Внедрить условие, переданное в виде параметра в функцию, в тело операции не получится. Это же статический SQL, а не динамический.
 
 
Можно передать в функцию строковый параметр, но при чём тут тогда макросы...
 
и в итоговом запросе будет условие типа 
 
 	  | Код: | 	 		  
 
decode(p_param
 
     , '1=1', case when 1=1 then 1 else 0
 
    , 'srok>0 and srok<12 and prczalog<130', case when srok>0 and srok<12 and prczalog<130 then 1 else 0
 
   , 0) = 1 | 	  
 
 
либо должно быть несколько запросов с различными комбинациями условий
 
 
 	  | Код: | 	 		  
 
if p_param = '1=1' then
 
  simple_cursor.open;
 
  return simple_cursor;
 
elsif p_param = 'srok>0 and srok<12 and prczalog<130' then
 
  cursor_factor1.open;
 
  return cursor_factor1;
 
else
 
  pragma error('Фигня какая-то пришла:'||p_param);
 
end if;
 
 | 	  
 
 
либо должен быть динамический запрос:
 
 	  | Код: | 	 		  
 
var v varchar2(32767);
 
var c$ utils.ref_cursor;
 
v := 'select бла-бла-бла from тра-ля-ля where 1=1 and '||p_param;
 
utils.open_cursor(c$, v);
 
return c$;
 
 | 	  
 
 
(кстати, динамический SQL может быть и на языке PL/PLUS, с предварительной компиляцией)
 
 
Или можно организовать полный перебор всех значений, вызов функции внутри цикла с передачей анализируемых значений и continue по результатам функции... | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |