2012-10-23 49 views
0

我有這段代碼嵌入在我的sql中。出於某種原因,每當我最後一個ELSE塊被執行時,我都會看到。這裏是我的代碼:PL SQL IF-THEN-ELSE塊

IF REGEXP_LIKE (UPPER(V_TEMP_DEPT_1), 
     'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
      UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
       V_DEPT_N := V_TEMP_DEPT_1; 
       V_ADDR_LINE1:= NULL; 
     ELSE 

     IF REGEXP_LIKE (UPPER(V_TEMP_DEPT_2), 
     'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
     UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
      V_DEPT_N := V_TEMP_DEPT_2; 
      V_ADDR_LINE2:= NULL; 
        ELSE 

     IF REGEXP_LIKE (UPPER(V_TEMP_DEPT_3), 
      'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
      UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
       V_DEPT_N := V_TEMP_DEPT_3; 
       V_ADDR_LINE3:= NULL; 
     ELSE 

     IF REGEXP_LIKE (UPPER(V_TEMP_DEPT_4), 
      'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
      UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
       V_DEPT_N := V_TEMP_DEPT_4; 
       V_ADDR_LINE4:= NULL; 
     ELSE 
       -- The below line always gets executed. 
       V_DEPT_N:= NULL; 

     END IF; 
     END IF; 
      END IF; 
      END IF; 

任何想法,我究竟做錯了什麼?

+0

什麼在'V_TEMP_DEPT_ <<1-4>>'?這些變量中至少有一個是否有價值,您認爲應該與正則表達式匹配?您是否已經根據此數據分別測試了正則表達式,以驗證正則表達式是否與您認爲應匹配的內容相符? –

+0

是的,我做了測試,它的工作正常。順便說一句,這整個代碼是在一個循環內。你想讓我把整個代碼放在這裏嗎?它像130行... – Bytekoder

+0

您可以發佈的最有用的東西是您可以創建的最簡單的測試用例,它演示了我們可以在本地系統上運行的問題。你需要循環來證明問題嗎?如果是這樣,請包括它。如果不是這樣,當你把測試用例放在一起時就把它排除掉。你是否需要所有4條IF語句來證明這個問題?如果是這樣,則包括全部4.如果不是,則只發布1或2,或者任何表示問題的最小數量的「IF」語句。 –

回答

0
IF REGEXP_LIKE (UPPER(V_TEMP_DEPT_1), 
    'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
     UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
      V_DEPT_N := V_TEMP_DEPT_1; 
      V_ADDR_LINE1:= NULL; 

    ELSIF REGEXP_LIKE (UPPER(V_TEMP_DEPT_2), 
    'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
    UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
     V_DEPT_N := V_TEMP_DEPT_2; 
     V_ADDR_LINE2:= NULL; 

    ELSIF REGEXP_LIKE (UPPER(V_TEMP_DEPT_3), 
     'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
     UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
      V_DEPT_N := V_TEMP_DEPT_3; 
      V_ADDR_LINE3:= NULL; 

    ELSIF REGEXP_LIKE (UPPER(V_TEMP_DEPT_4), 
     'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG|FAC|AMU|LAB|WING| 
     UNIT|SERV|AFT|CENT|CLIN|KLIN|ETHICS COM|EC|IRB') THEN 
      V_DEPT_N := V_TEMP_DEPT_4; 
      V_ADDR_LINE4:= NULL; 
    ELSE 
      -- Now this works!! 
      V_DEPT_N:= NULL; 

    END IF;