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

                              Can't initialize raids on a new ASUS Prime B360M-A motherboard2019 Community Moderator ElectionSimilar to RAID config yet more like mirroring solution?Can't get motherboard serial numberWhy does the BIOS entry point start with a WBINVD instruction?UEFI performance Asus Maximus V Extreme

                              Identity Server 4 is not redirecting to Angular app after login2019 Community Moderator ElectionIdentity Server 4 and dockerIdentityserver implicit flow unauthorized_clientIdentityServer Hybrid Flow - Access Token is null after user successful loginIdentity Server to MVC client : Page Redirect After loginLogin with Steam OpenId(oidc-client-js)Identity Server 4+.NET Core 2.0 + IdentityIdentityServer4 post-login redirect not working in Edge browserCall to IdentityServer4 generates System.NullReferenceException: Object reference not set to an instance of an objectIdentityServer4 without HTTPS not workingHow to get Authorization code from identity server without login form

                              2005 Ahvaz unrest Contents Background Causes Casualties Aftermath See also References Navigation menue"At Least 10 Are Killed by Bombs in Iran""Iran"Archived"Arab-Iranians in Iran to make April 15 'Day of Fury'"State of Mind, State of Order: Reactions to Ethnic Unrest in the Islamic Republic of Iran.10.1111/j.1754-9469.2008.00028.x"Iran hangs Arab separatists"Iran Overview from ArchivedConstitution of the Islamic Republic of Iran"Tehran puzzled by forged 'riots' letter""Iran and its minorities: Down in the second class""Iran: Handling Of Ahvaz Unrest Could End With Televised Confessions""Bombings Rock Iran Ahead of Election""Five die in Iran ethnic clashes""Iran: Need for restraint as anniversary of unrest in Khuzestan approaches"Archived"Iranian Sunni protesters killed in clashes with security forces"Archived