Оптимизация запросов для Oracle - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу настроить запрос ниже, который выполняется в цикле, и значения для minprice и maxprice динамически подставляются.

select * 
from product 
where name = 'a' 
  and minprice >= 0 
  and maxprice <=10

, поэтому в цикле будет несколько запросов с разными значениями

select * 
from product 
where name = 'a' 
  and minprice >= 40 
  and maxprice <=70

select * 
from product 
where name = 'a' 
  and minprice >= 50 
  and maxprice <=60

Один из способов - написать хранимую процедуру и выполнить все циклы для разных цен на уровне базы данных.

Есть ли другой способ настройки, чтобы был один запрос с несколькимидинамические значения

1 Ответ

0 голосов
/ 23 ноября 2018

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

Если в настоящее время вы делаете

for i in (select * 
            from product 
           where name = 'a' 
             and minprice >= 0 
             and maxprice <=10 )
loop  
    --inserting/updating/deleting  
    insert into another_table values(1.product_id,i.name);
end loop;

изменить это на

insert 
   into another_table
select producr_id,name 
  from product 
 where name = 'a' 
   and minprice >= 0 
   and maxprice <=60;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...