CftClub.ru
Клуб специалистов ЦФТ-Банк

Модификатор в качестве параметра функции

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 по результатам функции...
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru