|
замена оператора NVL
|
|||
---|---|---|---|
#18+
Уважаемые Дамы и господа! Подскажите, пожалуйста, более элегантный способ рещения следующей проблемы- На Oracle имеется хранимая процедура с параметром согласно которому в теле процедуры выполняются какие-то действия- например открывается курсор: open cursor for select * from table1 where field1=v_parameter; Причем, при определенном значении этого параметра должны возвращаться все записи, то есть- open cursor for select * from table1; Наше решение проблемы следующее- В случае, когда необходимо получить все записи, передаем v_parameter= NULL . В теле процедуры пишем: open cursor for select * from table1 where field1=nvl(v_parameter,field1); или open cursor for select * from table1 where (v_parametr is null or field1=v_parameter); Все это успешно работает, но только вот как-то нехорошо используются индексы , или даже совсем не используются, что приводит к значительному увеличению скорости работы процедуры. Вопрос- нет ли какого-нибудь более элегантного (в смысле "скорострельности" ) способа решения этой проблемы? Заранее Вам благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2001, 07:42 |
|
замена оператора NVL
|
|||
---|---|---|---|
#18+
Сначала анализируйте значение передаваемого параметра, а уже потом формируйте необходимый вам курсор ( выборка записей с опред. значением поля, или всех записей), типа IF v_parameter IS NULL THEN open cursor for select * from table1; ELSE open cursor for select * from table1 where field1=v_parameter; END IF; ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2001, 14:35 |
|
замена оператора NVL
|
|||
---|---|---|---|
#18+
Спасибо за совет, но в нашем случае он не подходит, потому что нам необходимо задавать несколько параметров- до 10 из которых любой может быть не задан и в этом случае тест процедуры приобретает весьма внушительные размеры. С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2001, 02:21 |
|
замена оператора NVL
|
|||
---|---|---|---|
#18+
В Вашем вопросе речь шла об одном параметре. И насколько я понял работают два варианта - либо все записи ( параметр NULL), либо записи со значением поля равным параметру. Как задали вопрос, так я и ответил. Хотите больше - точнее формулир. вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2001, 14:23 |
|
|
start [/forum/topic.php?fid=52&msg=32018343&tid=1993482]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 163ms |
0 / 0 |