簡體   English   中英

如何在Oracle 11g r2中的存儲過程的where子句中放置case語句

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM