在where子句中的情况

时间:2016-10-28 09:17:27

标签: sql oracle oracle-sqldeveloper

我正在尝试编写一个查询,我必须根据定义的变量在where子句中执行选择。

我的脚本如下所示:

def schd_yn ='Y';
def clin_schd = '1,2';

CREATE TABLE TEMP_SUBOPT AS 
  SELECT *
    FROM P112921.SCHEDULE_DATA     
    WHERE clin_sch IN (CASE WHEN '&schd_yn.' = 'Y' 
                            THEN &clin_schd.
                            ELSE clin_sch
                         END)
;

我想要做的就是从schd_yn设置为N的情况下获取源中的所有数据,并在schd_yn设置为Y的情况下仅采用clin_schd中定义的值。

如果您在clin_sched中只有1个值,此解决方案效果很好。

这些组合效果很好:

def schd_yn='Y'; //takes only clin_sch=1
def clin_schd='1';

def schd_yn='N'; //takes everything as expected
def clin_schd='1';

这些组合无法正常运行并产生错误:

def schd_yn='Y';
def clin_schd='1,2';

def schd_yn='N';
def clin_schd='1,2';

有人知道如何使这项工作吗?

谢谢

2 个答案:

答案 0 :(得分:0)

你可以像这样使用:

select ...
from
your_table
where
def schd_yn='Y' and def clin_schd='1'
union all
select ...
from
your_table
where
def schd_yn='N' and def clin_schd='1';

答案 1 :(得分:0)

我想你想要这个逻辑:

WHERE (&schd_yn = 'N' OR clin_sch = &clin_schd)

你要求:

  

我想要做的就是从我的来源获取所有数据   例如,schd_yn设置为N,并且仅采用在中定义的值   如果schd_yn设置为Y,则为clin_schd。

如果schd_yn只能是'N''Y'(我认为是合理的假设),则上述情况有效。更正式地说,你似乎想要:

WHERE (&schd_yn = 'N' OR (&schd_yn = 'Y' AND clin_sch = &clin_schd))