我想写一个查询,在这个查询中我必须根据一个已定义的变量在where子句中执行一个选择。在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,并采取只在clin_schd定义的值case schd_yn设置为Y.
该解决方案适用于您在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';
是否有人知道如何使这项工作?
谢谢
通常最好在'WHERE'子句中使用'AND' /'OR'而不是'case'表达式。 – jarlh
不要在SQL中使用逗号分隔值。这只会导致你很多麻烦。 – jarlh
@a_horse_with_no_name:你不应该删除sqldeveloper标签,因为这个脚本看起来像SQL Developer特有的。我又添加了标签。 –