Dynamic SQL (where) in Firebird stored procedureHow can I prevent SQL injection in PHP?Add a column with a default value to an existing table in SQL ServerInsert results of a stored procedure into a temporary tableFunction vs. Stored Procedure in SQL ServerSQL Server - SELECT FROM stored procedureHow to check if a stored procedure exists before creating itHow do I UPDATE from a SELECT in SQL Server?Finding duplicate values in a SQL tableSearch text in stored procedure in SQL ServerConvert INT to VARCHAR SQL

Does an advisor owe his/her student anything? Will an advisor keep a PhD student only out of pity?

Do we have to expect a queue for the shuttle from Watford Junction to Harry Potter Studio?

Why can't the Brexit deadlock in the UK parliament be solved with a plurality vote?

What is the highest possible scrabble score for placing a single tile

Delete multiple columns using awk or sed

The IT department bottlenecks progress, how should I handle this?

A Trivial Diagnosis

awk assign to multiple variables at once

Is this toilet slogan correct usage of the English language?

Microchip documentation does not label CAN buss pins on micro controller pinout diagram

Why should universal income be universal?

What features enable the Su-25 Frogfoot to operate with such a wide variety of fuels?

Biological Blimps: Propulsion

Shouldn’t conservatives embrace universal basic income?

Will number of steps recorded on FitBit/any fitness tracker add up distance in PokemonGo?

How to convince somebody that he is fit for something else, but not this job?

PTIJ: Why is Haman obsessed with Bose?

How do I fix the group tension caused by my character stealing and possibly killing without provocation?

It grows, but water kills it

Strong empirical falsification of quantum mechanics based on vacuum energy density?

Doesn't the system of the Supreme Court oppose justice?

Short story about a deaf man, who cuts people tongues

What is the difference between lands and mana?

Non-trope happy ending?



Dynamic SQL (where) in Firebird stored procedure


How can I prevent SQL injection in PHP?Add a column with a default value to an existing table in SQL ServerInsert results of a stored procedure into a temporary tableFunction vs. Stored Procedure in SQL ServerSQL Server - SELECT FROM stored procedureHow to check if a stored procedure exists before creating itHow do I UPDATE from a SELECT in SQL Server?Finding duplicate values in a SQL tableSearch text in stored procedure in SQL ServerConvert INT to VARCHAR SQL













1















I Have an SP that receive 2 parameters, P1 and P2, like this:



CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
RETURNS (
code VARCHAR(10),
name VARCHAR(70),
state VARCHAR(2),
situation VARCHAR(20)
AS
...
...


And I need to generate the where clause based on the P2 parameter, like this:



if (P2=1) then
where (state='SP' and situation='stopped')
elseif (P2=2)
where (state='MG' and situation='moving')


How to use this type of if statement in where clause?










share|improve this question




























    1















    I Have an SP that receive 2 parameters, P1 and P2, like this:



    CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
    RETURNS (
    code VARCHAR(10),
    name VARCHAR(70),
    state VARCHAR(2),
    situation VARCHAR(20)
    AS
    ...
    ...


    And I need to generate the where clause based on the P2 parameter, like this:



    if (P2=1) then
    where (state='SP' and situation='stopped')
    elseif (P2=2)
    where (state='MG' and situation='moving')


    How to use this type of if statement in where clause?










    share|improve this question


























      1












      1








      1








      I Have an SP that receive 2 parameters, P1 and P2, like this:



      CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
      RETURNS (
      code VARCHAR(10),
      name VARCHAR(70),
      state VARCHAR(2),
      situation VARCHAR(20)
      AS
      ...
      ...


      And I need to generate the where clause based on the P2 parameter, like this:



      if (P2=1) then
      where (state='SP' and situation='stopped')
      elseif (P2=2)
      where (state='MG' and situation='moving')


      How to use this type of if statement in where clause?










      share|improve this question
















      I Have an SP that receive 2 parameters, P1 and P2, like this:



      CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
      RETURNS (
      code VARCHAR(10),
      name VARCHAR(70),
      state VARCHAR(2),
      situation VARCHAR(20)
      AS
      ...
      ...


      And I need to generate the where clause based on the P2 parameter, like this:



      if (P2=1) then
      where (state='SP' and situation='stopped')
      elseif (P2=2)
      where (state='MG' and situation='moving')


      How to use this type of if statement in where clause?







      sql stored-procedures firebird firebird2.5






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 8 at 15:01









      Mark Rotteveel

      61.4k1478121




      61.4k1478121










      asked Mar 7 at 23:54









      SidonSidon

      6491716




      6491716






















          2 Answers
          2






          active

          oldest

          votes


















          2














          To me your question translates as a simple OR condition in the WHERE clause of a SQL query:



          WHERE
          (:P2 = 1 AND state='SP' and situation='stopped')
          OR (:P2 = 2 AND state='MG' and situation='moving')





          share|improve this answer






























            1














            The answer of GMB will work fine for most situations, but in more complex cases it may have less desirable performance. An alternative solution would be to build a query string dynamically and execute it with execute statement:



            CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
            RETURNS (
            code VARCHAR(10),
            name VARCHAR(70),
            state VARCHAR(2),
            situation VARCHAR(20)
            AS
            declare query varchar(2048);
            begin
            query = 'select ......';
            if (p2 = 1) then
            query = query || ' where (state=''SP'' and situation=''stopped'')';
            else if (p2 = 2) then
            query = query || ' where (state=''MG'' and situation=''moving'')';

            -- if you expect a single result
            execute statement query into code, name, state, situation;

            -- OR

            -- for multiple results
            for execute statement query into code, name, state, situation do
            suspend;
            end





            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%2f55054682%2fdynamic-sql-where-in-firebird-stored-procedure%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2














              To me your question translates as a simple OR condition in the WHERE clause of a SQL query:



              WHERE
              (:P2 = 1 AND state='SP' and situation='stopped')
              OR (:P2 = 2 AND state='MG' and situation='moving')





              share|improve this answer



























                2














                To me your question translates as a simple OR condition in the WHERE clause of a SQL query:



                WHERE
                (:P2 = 1 AND state='SP' and situation='stopped')
                OR (:P2 = 2 AND state='MG' and situation='moving')





                share|improve this answer

























                  2












                  2








                  2







                  To me your question translates as a simple OR condition in the WHERE clause of a SQL query:



                  WHERE
                  (:P2 = 1 AND state='SP' and situation='stopped')
                  OR (:P2 = 2 AND state='MG' and situation='moving')





                  share|improve this answer













                  To me your question translates as a simple OR condition in the WHERE clause of a SQL query:



                  WHERE
                  (:P2 = 1 AND state='SP' and situation='stopped')
                  OR (:P2 = 2 AND state='MG' and situation='moving')






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Mar 8 at 0:47









                  GMBGMB

                  18.6k31028




                  18.6k31028























                      1














                      The answer of GMB will work fine for most situations, but in more complex cases it may have less desirable performance. An alternative solution would be to build a query string dynamically and execute it with execute statement:



                      CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
                      RETURNS (
                      code VARCHAR(10),
                      name VARCHAR(70),
                      state VARCHAR(2),
                      situation VARCHAR(20)
                      AS
                      declare query varchar(2048);
                      begin
                      query = 'select ......';
                      if (p2 = 1) then
                      query = query || ' where (state=''SP'' and situation=''stopped'')';
                      else if (p2 = 2) then
                      query = query || ' where (state=''MG'' and situation=''moving'')';

                      -- if you expect a single result
                      execute statement query into code, name, state, situation;

                      -- OR

                      -- for multiple results
                      for execute statement query into code, name, state, situation do
                      suspend;
                      end





                      share|improve this answer





























                        1














                        The answer of GMB will work fine for most situations, but in more complex cases it may have less desirable performance. An alternative solution would be to build a query string dynamically and execute it with execute statement:



                        CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
                        RETURNS (
                        code VARCHAR(10),
                        name VARCHAR(70),
                        state VARCHAR(2),
                        situation VARCHAR(20)
                        AS
                        declare query varchar(2048);
                        begin
                        query = 'select ......';
                        if (p2 = 1) then
                        query = query || ' where (state=''SP'' and situation=''stopped'')';
                        else if (p2 = 2) then
                        query = query || ' where (state=''MG'' and situation=''moving'')';

                        -- if you expect a single result
                        execute statement query into code, name, state, situation;

                        -- OR

                        -- for multiple results
                        for execute statement query into code, name, state, situation do
                        suspend;
                        end





                        share|improve this answer



























                          1












                          1








                          1







                          The answer of GMB will work fine for most situations, but in more complex cases it may have less desirable performance. An alternative solution would be to build a query string dynamically and execute it with execute statement:



                          CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
                          RETURNS (
                          code VARCHAR(10),
                          name VARCHAR(70),
                          state VARCHAR(2),
                          situation VARCHAR(20)
                          AS
                          declare query varchar(2048);
                          begin
                          query = 'select ......';
                          if (p2 = 1) then
                          query = query || ' where (state=''SP'' and situation=''stopped'')';
                          else if (p2 = 2) then
                          query = query || ' where (state=''MG'' and situation=''moving'')';

                          -- if you expect a single result
                          execute statement query into code, name, state, situation;

                          -- OR

                          -- for multiple results
                          for execute statement query into code, name, state, situation do
                          suspend;
                          end





                          share|improve this answer















                          The answer of GMB will work fine for most situations, but in more complex cases it may have less desirable performance. An alternative solution would be to build a query string dynamically and execute it with execute statement:



                          CREATE OR ALTER PROCEDURE MY_PROC (P1 varchar(10), P2 smallint = 1)
                          RETURNS (
                          code VARCHAR(10),
                          name VARCHAR(70),
                          state VARCHAR(2),
                          situation VARCHAR(20)
                          AS
                          declare query varchar(2048);
                          begin
                          query = 'select ......';
                          if (p2 = 1) then
                          query = query || ' where (state=''SP'' and situation=''stopped'')';
                          else if (p2 = 2) then
                          query = query || ' where (state=''MG'' and situation=''moving'')';

                          -- if you expect a single result
                          execute statement query into code, name, state, situation;

                          -- OR

                          -- for multiple results
                          for execute statement query into code, name, state, situation do
                          suspend;
                          end






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Mar 8 at 16:00

























                          answered Mar 8 at 15:07









                          Mark RotteveelMark Rotteveel

                          61.4k1478121




                          61.4k1478121



























                              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%2f55054682%2fdynamic-sql-where-in-firebird-stored-procedure%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







                              Popular posts from this blog

                              Thal And Out Agency railway station See also References External links Navigation menuOfficial Web Site of Pakistan RailwaysArchivedOfficial Web Site of Pakistan Railwayseeexpanding ite

                              Understanding generators in Python2019 Community Moderator ElectionGenerator function not working pythonFor loop not executing two timesGenerators - Printing generated valuesWhy can a python generator only be used once?What exactly do generators do?What does the “yield” keyword do?What does “list comprehension” mean? How does it work and how can I use it?sklearn Kfold acces single fold instead of for loopIs a generator the callable? Which is the generator?Apply Border To Range Of Cells Using OpenpyxlCalling an external command in PythonWhat are metaclasses in Python?What is the difference between @staticmethod and @classmethod?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow can I safely create a nested directory in Python?Does Python have a ternary conditional operator?Understanding slice notationUnderstanding Python super() with __init__() methodsDoes Python have a string 'contains' substring method?

                              How can I change the color of pagination dots of UIPageControl?How to change UIPageControl dotsIs there a way to change page indicator dots colorCustomize dot with image of UIPageControl at index 0 of UIPageControlNo visible @interface for 'NSObject<PageControlDelegate>' declares the selector 'pageControlPageDidChange:'How to change the color of pagination dots in UIPageControl with a different color per pagepagecontrol indicator custom image instead of DefaultChanging the colour of UIPageControl dots in MonoTouchpagecontrol selectable page visibility color?Alternative way to load ViewControllers on a UIPageControlHow to set only layer.border-color for UIpage control dots in swiftHow can I develop for iPhone using a Windows development machine?How to change the name of an iOS app?UITableView - change section header coloruipagecontrol indicator(dot)issueCustom UIPageControl dots color not changingchange the interspace between UIPageControl dotsHow to change Status Bar text color in iOSHow can I change image tintColor in iOS and WatchKitUIPageControl dots with larger space in between each dotsHow to change the color of pagination dots in UIPageControl with a different color per page