Модификатор в качестве параметра функции
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 по результатам функции... |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|