Запрос на сбой интерактивного отчета с условиями выделения строки css - PullRequest
1 голос
/ 30 апреля 2020

Я использую запрос ниже, чтобы выделить столбец состояния на основе значений столбца. сбой с ошибкой в ​​блоке else: ORA-20999: Не удалось проанализировать SQL запрос!

ORA-06550: строка 12, столбец 15: ORA-00923: ключевое слово FROM не найдено там, где ожидается

Где идет ошибка ??

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Кажется, что 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;

Разве это не проще и проще для чтения и обслуживания?

1 голос
/ 30 апреля 2020

Последняя строка оператора 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",

Вам также может быть легче прочитать ваш код, если вы не используете двойные кавычки идентификаторов и используете более простые псевдонимы таблиц, но я это понимаю код может быть сгенерирован откуда-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...