[英]how to put case statement in where clause in Stored procedure in oracle 11g r2
我陷入了一個問題..我從網上搜索了它,發現了這樣的解決方案..
SELECT B.ROW_ID INTO LOC_ROW_ID
FROM
(SELECT ROWNUM AS ROW_ID,
A.YEAR,
A.PERIOD
FROM
(SELECT DISTINCT TP.YEAR,
TP.MONTH
FROM TB_PLAN TP
WHERE
ML_TYP=PARM_ML
AND ANALYSIS_TYP=PARM_ANALYSIS_TYP
** AND CASE
WHEN PARM_TYP_ST IS NULL THEN PLAN_CDE
END=PARM_PLAN_CDE
AND CASE
WHEN PARM_TYP_ST IN NOT NULL THEN PLAN_CDE
END=PARM_PLAN_CDE **
ORDER BY YEAR DESC, MONTH DESC
)A
)B
WHERE
B.YEAR=2013
AND PERIOD=3;
在這里,PARM_ML,PARM_ANALYSIS_TYP,PARM_TYP_ST是作為輸入參數傳遞的參數。 LOC_ROW_ID是ROW_ID的值的局部參數
I dont know whether this is approach for my problem or not. But not getting any . result from this query
what i want to do is..
using same query for two cases
case1: when
ML_TYP=PARM_ML
AND ANALYSIS_TYP=PARM_ANALYSIS_TYP
AND PLAN_CDE =PARM_PLAN_CDE
case2: when
ML_TYP=PARM_ML
AND ANALYSIS_TYP=PARM_ANALYSIS_TYP
我是對的還是應該尋求其他解決方案。 請提出建議。
Basic query is
SELECT DISTINCT TP.YEAR,
TP.MONTH
FROM TB_PLAN TP
WHERE
ML_TYP=PARM_ML
AND ANALYSIS_TYP=PARM_ANALYSIS_TYP
** AND CASE
WHEN PARM_TYP_ST IS NULL THEN PLAN_CDE
END=PARM_PLAN_CDE
AND CASE
WHEN PARM_TYP_ST IN NOT NULL THEN PLAN_CDE
END=PARM_PLAN_CDE **
ORDER BY YEAR DESC, MONTH DESC
我認為這是您要尋找的邏輯:
WHERE ML_TYP = PARM_ML AND
ANALYSIS_TYP = PARM_ANALYSIS_TYP AND
(PARM_TYP_ST IS NOT NULL OR PLAN_CDE = PARM_PLAN_CDE)
這使PARM_PLAN_CDE
成為可選參數。 當為NULL
,將不過濾數據。
一般而言, where
條款是沒有更多可讀where
子句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.