【问题标题】:Query with embedded CURSOR - what is the error?使用嵌入式 CURSOR 查询 - 错误是什么?
【发布时间】:2020-08-19 20:33:08
【问题描述】:

以下查询有效....

SELECT art.cmp_lvl,
              (
               CURSOR (
                 SELECT   a.cmp_lvl,
                          (
                            CURSOR (
                              SELECT   b.cmp_lvl_code,
                                       b.v1 "R_ST",
                                       b.f_name
                                  FROM temp_data b
                                 WHERE b.cmp_lvl = a.cmp_lvl
                              ORDER BY SEQ
                            )
                          ) employee
                     FROM temp_data a
                    WHERE a.cmp_lvl = art.cmp_lvl
                 GROUP BY a.cmp_lvl
               )
              ) g_pos_record
         FROM temp_data art
        WHERE art.report_name = 'EMP_REPORT'
        GROUP BY cmp_lvl
        ORDER BY cmp_lvl DESC;

然后我只需添加另一个列名,如下所示

SELECT art.cmp_lvl,
       art.v1                    /*ADDED THIS LINE, SHOWS AN ERROR IN THIS LINE */
              (
               CURSOR (
                 SELECT   a.cmp_lvl,
                          a.v1   /*ADDED THIS LINE */
                          (
                            CURSOR (
                              SELECT   b.cmp_lvl_code,
                                       b.v1 "R_ST",
                                       b.f_name 
                                  FROM temp_data b
                                 WHERE b.cmp_lvl = a.cmp_lvl
                                   AND b.v1 = a.v1           /*ADDED THIS LINE */
                              ORDER BY SEQ
                            )
                          ) employee
                     FROM temp_data a
                    WHERE a.cmp_lvl = art.cmp_lvl
                      AND a.v1 = art.v1                      /*ADDED THIS LINE */
                 GROUP BY a.cmp_lvl
               )
              ) g_pos_record
         FROM temp_data art
        WHERE art.report_name = 'EMP_REPORT' 
        GROUP BY cmp_lvl
        ORDER BY cmp_lvl DESC;

错误:ORA-00904:“ART”、“V1”:标识符无效 00904. 00000 - "%s: 无效的标识符" "原因 *第 2 行的操作错误

我不知道为什么。添加的列在表中(确定)。

【问题讨论】:

  • 缺少逗号是一个问题,您需要按新添加的字段分组或获取该字段的聚合值
  • 谢谢。修正了它,你回答了这一点。
  • 幸好你记得 2 周前有人问过一个问题:O

标签: sql oracle


【解决方案1】:

您将数据聚合到每个 cmp_lvl (GROUP BY cmp_lvl) 的一个结果行。然后你想显示 cmp_lvl 的 v1。但是,由于您要聚合的每个 cmp_lvl 有多行,因此应显示哪一行的 v1?

另外,art.v1后面少了一个逗号。

一种解决方案是决定一个 v1,例如:

SELECT art.cmp_lvl,
       MAX(art.v1),
       ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2011-01-23
    • 2012-04-26
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多