Discussions
Categories
- 196.7K All Categories
- 2.2K Data
- 235 Big Data Appliance
- 1.9K Data Science
- 449.8K Databases
- 221.6K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 549 MySQL Community Space
- 477 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 532 SQLcl
- 4K SQL Developer Data Modeler
- 186.9K SQL & PL/SQL
- 21.3K SQL Developer
- 295.4K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.1K Development Tools
- 104 DevOps
- 3.1K QA/Testing
- 645.9K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 153 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 17 Java Essentials
- 158 Java 8 Questions
- 85.9K Java Programming
- 79 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.2K Java SE
- 13.8K Java Security
- 203 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 395 LiveLabs
- 37 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.6K Other Languages
- 2.3K Chinese
- 170 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 230 Portuguese
dynamic statement in where clause???

DeclanB
Member Posts: 6
Hi all,
I am writing a procedure and the query will be different based on the input parameters.
I'm wondering how I can do this inside the where clause? simplified example
select *
from tableA a, tableB b
where a.id = b.id
/* if input parameter = 'abc' then */
and a.total = b.total
/* if input parameter = 'xyz' then */
and a.total != b.total
I was thinking case statement but from what i read it cannot be used in this situation
Thanks
I am writing a procedure and the query will be different based on the input parameters.
I'm wondering how I can do this inside the where clause? simplified example
select *
from tableA a, tableB b
where a.id = b.id
/* if input parameter = 'abc' then */
and a.total = b.total
/* if input parameter = 'xyz' then */
and a.total != b.total
I was thinking case statement but from what i read it cannot be used in this situation
Thanks
Best Answer
-
Hi,
Give this a try.
not Testedselect * from tableA a, tableB b where a.id = b.id and (a.total= case when :input_param='abc' then b.total end or a.total != case when :input_param='xyz' then b.total end)
Cheers!!!
Bhushan
Answers
-
Its advisable to use two different select statements using IF ..ELSE .. END IF logic checking the parameter value in IF clause.
Regards
Arun -
If the number of possible iterations of the input parameter are small I recommend the following (pseudo-code):
IF input_parameter = 'abc' THEN SELECT * FROM TABLEA A JOIN TABLEB B ON A.ID = B.ID WHERE A.TOTAL = B.TOTAL; ELSIF input_parameter = 'xyz' THEN SELECT * FROM TABLEA A JOIN TABLEB B ON A.ID = B.ID WHERE A.TOTAL != B.TOTAL; END IF;
This allows the query to be simpler and will probably yield better estimates out of the CBO. -
Hi,
Give this a try.
not Testedselect * from tableA a, tableB b where a.id = b.id and (a.total= case when :input_param='abc' then b.total end or a.total != case when :input_param='xyz' then b.total end)
Cheers!!!
Bhushan -
I've simplified the example quite a bit.
I am already switching on another input parameter so I want to try avoid having the similar query multiple times. -
DeclanB wrote:Ah. It's always helpful to provide an example that accurately depicts the situation at hand.
I've simplified the example quite a bit.I am already switching on another input parameter so I want to try avoid having the similar query multiple times.It could still be manageable if the number of inputs is small, but you may try the following:SELECT * FROM TABLEA A JOIN TABLEB B ON A.ID = B.ID WHERE (input_parameter = 'abc' AND A.TOTAL = B.TOTAL) OR (input_parameter = 'xyz' AND A.TOTAL != B.TOTAL);
This discussion has been closed.