powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / замена оператора NVL
5 сообщений из 5, страница 1 из 1
замена оператора NVL
    #32016612
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые Дамы и господа!

Подскажите, пожалуйста, более элегантный способ рещения следующей проблемы-

На 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);

Все это успешно работает, но только вот как-то нехорошо используются индексы , или даже совсем не используются,
что приводит к значительному увеличению скорости работы процедуры.

Вопрос- нет ли какого-нибудь более элегантного (в смысле "скорострельности" ) способа решения этой проблемы?

Заранее Вам благодарен.
...
Рейтинг: 0 / 0
замена оператора NVL
    #32016644
Docent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала анализируйте значение передаваемого параметра, а уже потом формируйте необходимый вам курсор ( выборка записей с опред. значением поля, или всех записей), типа

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;
...
Рейтинг: 0 / 0
замена оператора NVL
    #32016805
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за совет, но в нашем случае он не подходит, потому что
нам необходимо задавать несколько параметров- до 10 из которых любой может быть не задан и в этом случае
тест процедуры приобретает весьма внушительные размеры.
С уважением.
...
Рейтинг: 0 / 0
замена оператора NVL
    #32016947
Docent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Вашем вопросе речь шла об одном параметре. И насколько я понял работают два варианта - либо все записи ( параметр NULL), либо записи со значением поля равным параметру. Как задали вопрос, так я и ответил. Хотите больше - точнее формулир. вопрос.
...
Рейтинг: 0 / 0
замена оператора NVL
    #32018343
Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для использования индекса при поиске можно хинт INDEX в запрос включать
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / замена оператора NVL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]