【问题标题】:Oracle SQL Error : 00909. 00000 - "invalid number of arguments" in SELECT subqueryOracle SQL 错误:00909.00000 - SELECT 子查询中的“参数数量无效”
【发布时间】:2021-03-15 04:28:17
【问题描述】:

这是我第一次在公司使用oracle数据库,遇到了这个问题。

SELECT w.TABLE_NAME tbl_nm,
  MAX(CASE WHEN  t.partition_range LIKE 'year' THEN SUBSTR((w.PARTITION_NAME),1, LENGTH(w.PARTITION_NAME)-4) ELSE concat(SUBSTR((w.PARTITION_NAME), 1, LENGTH(w.PARTITION_NAME)-6)) END) AS par_nm,
  MAX(CASE WHEN t.partition_range LIKE 'year' THEN SUBSTR((w.PARTITION_NAME), LENGTH(w.PARTITION_NAME)-3,4) ELSE concat(SUBSTR((w.PARTITION_NAME), LENGTH(w.PARTITION_NAME)-5,6)) END) AS par_date,
  t.partition_range par_range,
  t.data_dir data_dir,
  t.index_dir index_dir,
  t.add_range add_range,
  CASE WHEN t.partition_range LIKE 'year' THEN EXTRACT(YEAR FROM systimestamp) ELSE TO_CHAR(systimestamp, 'YYYYMM') END AS cur_date
FROM INFORMATION_SCHEMA.PARTITIONS w, t_partition_manage t
WHERE w.TABLE_NAME = t.TABLE_NAME
GROUP BY w.TABLE_NAME

当我从INFORMATION_SCHEMA.PARTITIONSt_partition_manage中选择tbl_nmpar_nmpar_datepar_rangedata_dirindex_diradd_rangecur_date时,

MAX( ... ) 周围似乎有问题,我不知道出了什么问题...

这是错误代码

00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

我使用 SQLDeveloper 作为客户端。

【问题讨论】:

    标签: sql oracle plsql subquery


    【解决方案1】:

    concat 存在问题,因为它需要两个参数,而您只传递了一个参数。 Concat 在您的解决方案中根本不需要:

    SUBSTR(w.PARTITION_NAME, 1, LENGTH(w.PARTITION_NAME)-6)
    

    SUBSTR(w.PARTITION_NAME), LENGTH(w.PARTITION_NAME)-5,6) 
    

    另外,GROUP BY 中需要更多列,因为 select 不能直接使用不在 GROUP BY 子句中的列,或者您可以使用聚合函数。

    【讨论】:

      【解决方案2】:

      看起来像CONCAT;它需要两个参数,而你的只有一个。

      CONCAT (SUBSTR ((w.PARTITION_NAME), 1, LENGTH (w.PARTITION_NAME) - 6))
      

      【讨论】:

        猜你喜欢
        • 2019-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        相关资源
        最近更新 更多