Optimizing query for Oracle












0















I want to tune the query below which runs in a loop and values for minprice and maxprice are dynamically substitued.



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


so in loop there will be multiple query with different values



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

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


One way is to write a stored procedure and do all the looping for different prices at database level.



Is there any other way to tune so that there will be single query with multiple dynamic values










share|improve this question




















  • 2





    Show us the complete procedure (edit your question by clicking on the edit link below it, do not post code in comments)

    – a_horse_with_no_name
    Nov 23 '18 at 14:09
















0















I want to tune the query below which runs in a loop and values for minprice and maxprice are dynamically substitued.



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


so in loop there will be multiple query with different values



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

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


One way is to write a stored procedure and do all the looping for different prices at database level.



Is there any other way to tune so that there will be single query with multiple dynamic values










share|improve this question




















  • 2





    Show us the complete procedure (edit your question by clicking on the edit link below it, do not post code in comments)

    – a_horse_with_no_name
    Nov 23 '18 at 14:09














0












0








0








I want to tune the query below which runs in a loop and values for minprice and maxprice are dynamically substitued.



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


so in loop there will be multiple query with different values



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

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


One way is to write a stored procedure and do all the looping for different prices at database level.



Is there any other way to tune so that there will be single query with multiple dynamic values










share|improve this question
















I want to tune the query below which runs in a loop and values for minprice and maxprice are dynamically substitued.



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


so in loop there will be multiple query with different values



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

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


One way is to write a stored procedure and do all the looping for different prices at database level.



Is there any other way to tune so that there will be single query with multiple dynamic values







sql oracle plsql






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 '18 at 13:34









a_horse_with_no_name

307k46468567




307k46468567










asked Nov 23 '18 at 12:58









user3227660user3227660

12




12








  • 2





    Show us the complete procedure (edit your question by clicking on the edit link below it, do not post code in comments)

    – a_horse_with_no_name
    Nov 23 '18 at 14:09














  • 2





    Show us the complete procedure (edit your question by clicking on the edit link below it, do not post code in comments)

    – a_horse_with_no_name
    Nov 23 '18 at 14:09








2




2





Show us the complete procedure (edit your question by clicking on the edit link below it, do not post code in comments)

– a_horse_with_no_name
Nov 23 '18 at 14:09





Show us the complete procedure (edit your question by clicking on the edit link below it, do not post code in comments)

– a_horse_with_no_name
Nov 23 '18 at 14:09












1 Answer
1






active

oldest

votes


















0














SQL is a set oriented langauge, it works best when there are no loops, as it gives the optimizer the best possible way to achieve you end results.



If currently to you are doing



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;


change that to



insert 
into another_table
select producr_id,name
from product
where name = 'a'
and minprice >= 0
and maxprice <=60;





share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53447169%2foptimizing-query-for-oracle%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    SQL is a set oriented langauge, it works best when there are no loops, as it gives the optimizer the best possible way to achieve you end results.



    If currently to you are doing



    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;


    change that to



    insert 
    into another_table
    select producr_id,name
    from product
    where name = 'a'
    and minprice >= 0
    and maxprice <=60;





    share|improve this answer




























      0














      SQL is a set oriented langauge, it works best when there are no loops, as it gives the optimizer the best possible way to achieve you end results.



      If currently to you are doing



      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;


      change that to



      insert 
      into another_table
      select producr_id,name
      from product
      where name = 'a'
      and minprice >= 0
      and maxprice <=60;





      share|improve this answer


























        0












        0








        0







        SQL is a set oriented langauge, it works best when there are no loops, as it gives the optimizer the best possible way to achieve you end results.



        If currently to you are doing



        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;


        change that to



        insert 
        into another_table
        select producr_id,name
        from product
        where name = 'a'
        and minprice >= 0
        and maxprice <=60;





        share|improve this answer













        SQL is a set oriented langauge, it works best when there are no loops, as it gives the optimizer the best possible way to achieve you end results.



        If currently to you are doing



        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;


        change that to



        insert 
        into another_table
        select producr_id,name
        from product
        where name = 'a'
        and minprice >= 0
        and maxprice <=60;






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 23 '18 at 14:08









        George JosephGeorge Joseph

        1,590510




        1,590510
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53447169%2foptimizing-query-for-oracle%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Academy of Television Arts & Sciences

            L'Équipe

            1995 France bombings