【问题标题】:Query for interactive report failing with highlight row css conditions查询交互式报告失败并突出显示行 css 条件
【发布时间】:2020-08-14 09:23:17
【问题描述】:

我正在使用下面的查询来根据列值突出显示状态列。 它在 else 块中失败并出现错误: ORA-20999: 无法解析 SQL 查询!

ORA-06550:第 12 行,第 15 列:ORA-00923:在预期的地方找不到 FROM 关键字

哪里出错了??

【问题讨论】:

    标签: css oracle oracle-apex


    【解决方案1】:

    似乎CASE(选择状态)会导致问题,因为

    • 以逗号结尾,后面什么都没有
    • 您将整个 CASE 构造命名为 "PT_IT_ISSUES"."STATUS",这是一个列名;你应该使用别名,例如只需status

    类似这样的:

    SELECT "P_IT_ISSUES"."ISSUE_SUMMARY" AS "ISSUE_SUMMARY",
           "P_IT_PEOPLE"."PERSON_NAME" AS "IDENTIFIED_BY",
           "P_IT_ISSUES"."IDENTIFIED_DATE" AS "IDENTIFIED_DATE",
           "P_IT_DEPARTMENTS"."DEPT_NAME" AS "DEPT_NAME",
           DECODE ("P_IT_PEOPLE_1"."PERSON_NAME",
                   NULL, 'Unassigned',
                   "P_IT_PEOPLE_1"."PERSON_NAME")
              AS "ASSIGNED_TO",
           CASE
              WHEN "P_IT_ISSUES"."STATUS" = 'Open'
              THEN
                    '<aaab style= "    color: green; " >'
                 || TO_CHAR ("P_IT_ISSUES"."STATUS", '999,999,999,999,999')
                 || '</aaab>'
              WHEN "P_IT_ISSUES"."STATUS" = 'On-Hold'
              THEN
                    '<aaab style= "    color: red; " >'
                 || TO_CHAR ("P_IT_ISSUES"."STATUS", '999,999,999,999,999')
                 || '</aaab>'
              ELSE
                    '<aaab style= "    color: red; " >'
                 || TO_CHAR ("P_IT_ISSUES"."STATUS", '999,999,999,999,999')
                 || '</aaab>'
           END AS status                                                   -> this!
      FROM "P_IT_PEOPLE" "P_IT_PEOPLE_1",
           "P_IT_DEPARTMENTS" "P_IT_DEPARTMENTS",
           "P_IT_PEOPLE" "P_IT_PEOPLE",
           "P_IT_ISSUES" "P_IT_ISSUES"
     WHERE     "P_IT_ISSUES"."IDENTIFIED_BY_PERSON_ID" =
                  "P_IT_PEOPLE"."PERSON_ID"
           AND "P_IT_ISSUES"."ASSIGNED_TO_PERSON_ID" =
                  "P_IT_PEOPLE_1"."PERSON_ID"(+)
           AND "P_IT_ISSUES"."RELATED_DEPT_ID" = "P_IT_DEPARTMENTS"."DEPT_ID"
    

    但是,我会进一步重写该代码并

    • 引用表和列时省略双引号
    • 使用正确的(阅读:更简单的)表别名
    • 删除不必要的列别名
    • 重写 FROM 子句并显式连接表

    类似这样的:

    SELECT i.issue_summary,
           b.person_name AS identified_by,
           i.identified_date,
           d.dept_name,
           DECODE (a.person_name, NULL, 'Unassigned', a.person_name)
              AS assigned_to,
           CASE
              WHEN i.status = 'Open'
              THEN
                    '<aaab style= "    color: green; " >'
                 || TO_CHAR (i.status, '999,999,999,999,999')
                 || '</aaab>'
              WHEN i.status = 'On-Hold'
              THEN
                    '<aaab style= "    color: red; " >'
                 || TO_CHAR (i.status, '999,999,999,999,999')
                 || '</aaab>'
              ELSE
                    '<aaab style= "    color: red; " >'
                 || TO_CHAR (i.status, '999,999,999,999,999')
                 || '</aaab>'
           END
              AS status
      FROM p_it_issues i
           JOIN p_it_departments d ON i.related_dept_id = d.dept_id
           JOIN p_i_people b ON i.identified_by_person_id = b.person_id
           LEFT JOIN p_it_people a ON a.person_id = i.assigned_to_person_id;
    

    阅读和维护不是更简单、更容易吗?

    【讨论】:

    • 谢谢,现在的问题是我想突出显示该行,但它只是为文本着色。如果 Status ='Closed' 也是如此,默认情况下颜色变为红色。状态为打开的行没有颜色/突出显示。所以,1:我想相应地突出显示整行。 2:它也只是一个值的着色文本。我无法在 cmets 中附加屏幕截图 ele 会显示。有什么建议吗?
    • 我不擅长 CSS,抱歉。所陈述的问题是 ORA-00923,我认为它现在已修复。我建议您打开另一个与“如何使用 CSS 突出显示整行?”相关的问题。
    • 我已经打开了但还没有答案--stackoverflow.com/questions/61505073/…
    • 我明白了;希望有人能提供帮助。
    【解决方案2】:

    case 语句的最后一行无效。

        case when "P_IT_ISSUES"."STATUS" ='Open' 
        then '<aaab style= "    color: green; " >'
        ||to_char("P_IT_ISSUES"."STATUS",'999,999,999,999,999')||'</aaab>'
        when  "P_IT_ISSUES"."STATUS" ='On-Hold' 
        then '<aaab style= "    color: red; " >'
        ||to_char("P_IT_ISSUES"."STATUS",'999,999,999,999,999')||'</aaab>' 
        else '<aaab style= "    color: blue; " >'
        ||to_char("P_IT_ISSUES"."STATUS",'999,999,999,999,999')||'</aaab>' 
        end  as "Status",
    

    如果您不使用双引号标识符并使​​用更简单的表别名,您可能还会发现您的代码更易于阅读,但我知道此代码可能是从某个地方生成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多