ORA-00939: CASE 语句中的函数参数太多
ORA-00939: too many arguments for function in CASE Statement
我的案例陈述中出现 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
SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, 'EXCR'),1)
上述 SUBSTR 的语法不正确。正确的语法是:
SUBSTR( string, start_position [, length ] )
此外,substr
的索引从1
开始,而不是0
。
在SQL*Plus中执行,可以清楚的看到具体的错误,看下面的error:
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>
我的案例陈述中出现 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
SUBSTR(fridge_door_modela_id, 0, INSTR(fridge_door_modela_id, 'EXCR'),1)
上述 SUBSTR 的语法不正确。正确的语法是:
SUBSTR( string, start_position [, length ] )
此外,
substr
的索引从1
开始,而不是0
。
在SQL*Plus中执行,可以清楚的看到具体的错误,看下面的error:
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>