2015-06-03 95 views
1

我從我的case語句中得到了ORA-00939: too many arguments for function錯誤。ORA-00939:在CASE語句中的函數參數太多

我已經嘗試將它分成多個CASE語句,但仍然得到相同的錯誤。

CASE WHEN l.fridge_door_modela_id = 'II-SH' THEN 'IW' 
    WHEN l.fridge_door_modela_id = 'IIC-SH' THEN 'IW' 
    WHEN l.fridge_door_modela_id = 'CD' THEN 'RPFX' 
    WHEN l.fridge_door_modela_id LIKE 'EXCR%' THEN SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, 'EXCR'),1) 
    WHEN l.fridge_door_modela_id LIKE 'EX%' THEN SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, 'EX'),1) 
    WHEN l.fridge_door_modela_id LIKE '%-%' THEN SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, '-'),1) 
    ELSE 'CHECK CODE' 
    END AS Division 
+10

你'SUBSTR ()'調用有四個參數。最後我查了一下,這個函數只用了三個。如果您提供樣本數據和期望的結果,有人可能能夠幫助您獲得正確的代碼。 –

+1

如果你在'SQL * Plus'中執行它,那麼你會在確切的地方看到錯誤。 'SUBSTR'有3個參數,正確的語法是'SUBSTR(string,start_position [,length])'。 –

回答

1

SUBSTR(fridge_door_modela_id,0,INSTR(fridge_door_modela_id, 'EXCR'),1)

  • 上面語法SUBSTR不正確。正確的語法是:

    SUBSTR(string, start_position [, length ])
  • 而且,substr開始從1而不是0索引。

執行它的SQL * Plus給出了確切的錯誤顯然,看到下面的錯誤

SQL> WITH DATA AS(
    2 SELECT 'abcdEXCRijkl' fridge_door_modela_id FROM dual 
    3 ) 
    4 SELECT SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, 'EXCR'),1) 
    5 FROM DATA; 
SELECT SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, 'EXCR'),1) 
                      * 
ERROR at line 4: 
ORA-00939: too many arguments for function 


SQL> 

使用適當語法

SQL> WITH DATA AS(
    2 SELECT 'abcdEXCRijkl' fridge_door_modela_id FROM dual 
    3 ) 
    4 SELECT SUBSTR(fridge_door_modela_id, 1, INSTR(fridge_door_modela_id, 'EXCR', 1, 1)-1) 
    5 FROM DATA; 

SUBS 
---- 
abcd 

SQL>