【问题标题】:Error Msg = ORA-00909: invalid number of arguments错误消息 = ORA-00909:参数数量无效
【发布时间】:2022-01-02 00:34:18
【问题描述】:

错误消息 = ORA-00909:参数数量无效

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 的答案,不仅因为它为错误提供了正确的解决方案,而且因为它显示了如何布局代码以便于阅读。你未来的同事——甚至你未来的自己——会感谢你学习如何使用大小写、缩进和其他布局技术来使你的代码更具可读性。

标签: sql oracle


【解决方案1】:

如果你真的这样写查询,难怪你会出错。那是不可读的。

虽然,当正确格式化并修复错误时(它是错位的WHEN),它似乎正在返回一些东西。为了测试它,我创建了一个虚拟 CTE 并删除了 AggregationHKLRR_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,它工作正常。你做到了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多