我想寫一個查詢,在這個查詢中我必須根據一個已定義的變量在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特有的。我又添加了標籤。 –