ORA-00939:CASE语句中的函数参数太多

时间:2015-06-03 14:10:18

标签: sql oracle syntax arguments substr

我的案例陈述中出现ORA-00939: too many arguments for function错误。

我尝试将其拆分为多个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

1 个答案:

答案 0 :(得分: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>