错误消息 = ORA-00909:参数数量无效
Posted
技术标签:
【中文标题】错误消息 = ORA-00909:参数数量无效【英文标题】:Error Msg = ORA-00909: invalid number of arguments 【发布时间】:2022-01-02 00:34:18 【问题描述】:SELECT CASE
WHEN TO_DATE(TO_CHAR(TO_DATE(Aggregation.REPORTING_POSITION_DATE,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') > TO_DATE('2021-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS') THEN 'FALSE'
ELSE 'TRUE'
WHEN TO_DATE(TO_CHAR(TO_DATE(Aggregation.REPORTING_POSITION_DATE,'MM/DD/YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') > TO_DATE('2021-06-30 00:00:00','YYYY-MM-DD HH24:MI:SS') THEN 'FALSE'
ELSE 'TRUE'
END
FROM HKLRR_UAT_USER.aggr_707884
【问题讨论】:
可读性是一项功能。请研究@Littlefoot 的答案,不仅因为它为错误提供了正确的解决方案,而且因为它显示了如何布局代码以便于阅读。你未来的同事——甚至你未来的自己——会感谢你学习如何使用大小写、缩进和其他布局技术来使你的代码更具可读性。 【参考方案1】:如果你真的这样写查询,难怪你会出错。那是不可读的。
虽然,当正确格式化并修复错误时(它是错位的WHEN
),它似乎正在返回一些东西。为了测试它,我创建了一个虚拟 CTE 并删除了 Aggregation
和 HKLRR_UAT_USER
,因为我没有这些用户。
SQL> WITH
2 aggr_707884
3 AS
4 (SELECT '2021-09-11 12:22:33' reporting_position_date FROM DUAL)
5 SELECT CASE
6 WHEN TO_DATE (
7 TO_CHAR (
8 TO_DATE (REPORTING_POSITION_DATE,
9 'YYYY-MM-DD HH24:MI:SS'),
10 'YYYY-MM-DD HH24:MI:SS'),
11 'YYYY-MM-DD HH24:MI:SS') >
12 TO_DATE ('2021-06-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
13 THEN
14 'FALSE'
15 WHEN TO_DATE (
16 TO_CHAR (
17 TO_DATE (REPORTING_POSITION_DATE,
18 'MM/DD/YYYY HH24:MI:SS'),
19 'YYYY-MM-DD HH24:MI:SS'),
20 'YYYY-MM-DD HH24:MI:SS') >
21 TO_DATE ('2021-06-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
22 THEN
23 'FALSE'
24 ELSE
25 'TRUE'
26 END result
27 FROM aggr_707884
28 /
RESUL
-----
FALSE
SQL>
不知道你为什么要嵌套那么多TO_DATE
/TO_CHAR
函数;代码可以缩短为
SQL> WITH
2 aggr_707884
3 AS
4 (SELECT '2021-09-11 12:22:33' reporting_position_date FROM DUAL)
5 SELECT CASE
6 WHEN TO_DATE (REPORTING_POSITION_DATE, 'YYYY-MM-DD HH24:MI:SS') >
7 TO_DATE ('2021-06-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
8 THEN
9 'FALSE'
10 WHEN TO_DATE (REPORTING_POSITION_DATE, 'MM/DD/YYYY HH24:MI:SS') >
11 TO_DATE ('2021-06-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
12 THEN
13 'FALSE'
14 ELSE
15 'TRUE'
16 END result
17 FROM aggr_707884
18 /
RESUL
-----
FALSE
SQL>
最后,您似乎在重复WHEN
条件(因此删除其中一个)并假设reporting_position_date
列的数据类型是DATE
(应该是;不要将日期值存储为字符串),它变得如此简单
SQL> WITH aggr_707884 AS (SELECT SYSDATE reporting_position_date FROM DUAL)
2 SELECT CASE
3 WHEN REPORTING_POSITION_DATE > DATE '2021-06-30' THEN 'FALSE'
4 ELSE 'TRUE'
5 END result
6 FROM aggr_707884;
RESUL
-----
FALSE
SQL>
【讨论】:
嗨,Littlefoot,它工作正常。你做到了以上是关于错误消息 = ORA-00909:参数数量无效的主要内容,如果未能解决你的问题,请参考以下文章
SqlExceptionHelper 142: ORA-00909: 参数个数无效
SqlExceptionHelper 142: ORA-00909: 参数个数无效
ORA -00909 //sql 语句被忽略 ...过程创建时出现编译错误