如何为Oracle创建动态WHERE语句

问题描述 投票:0回答:3

我需要能够根据传递的变量动态更改WHERE部分。例如

SELECT item,description
FROM TABLE WHERE department = :department

我正在尝试做的是,如果传递的变量是'NY',那么我想查询CT,NJ和NY中的状态,但如果变量是'CA',则只查询CA.在那里我可以在WHERE部分使用CASE WHEN语句吗?

我不能只使用SP或游标查询。

sql oracle
3个回答
2
投票

那就是

where (department in ('CT', 'NJ', 'NY') and :department = 'NY')
   or (department = 'CA'                and :department = 'CA')

0
投票

我相信你想要的逻辑是:

where (department in ('CT', 'NJ', 'NY') and :department = 'NY') or
      (department = :department)

这适用于任何州,而不仅仅是列出的四个州。


0
投票

你也可以尝试这个,

INSTR(DECODE(:部门,'CA','CA','NY','CT,NJ,NY'),部门)> 0

© www.soinside.com 2019 - 2024. All rights reserved.