[英]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.