Оператор WITH SQL в HP Quality Center — Недопустимые операторы — Oracle DB

Я получаю сообщение об ошибке при попытке выполнить SQL-запрос в HP Quality Center. Сообщение «Центр качества не может выполнить запрос, поскольку он содержит недопустимые операторы. База данных — Oracle. Мой запрос:

WITH AUDIT AS
(
SELECT AUDIT_LOG.AU_ENTITY_ID AS DEFECT_ID,
       MIN(AUDIT_LOG.AU_TIME) AS Date_Deferred,
       AUDIT_LOG.AU_USER AS UserName_Deferred
FROM AUDIT_LOG
INNER JOIN AUDIT_PROPERTIES
ON AUDIT_LOG.AU_ACTION_ID = AUDIT_PROPERTIES.AP_ACTION_ID
WHERE AUDIT_LOG.AU_ENTITY_TYPE = 'BUG' 
  AND AUDIT_LOG.AU_ACTION = 'UPDATE' 
  AND AUDIT_PROPERTIES.AP_TABLE_NAME = 'BUG' 
  AND AUDIT_PROPERTIES.AP_FIELD_NAME = 'BG_STATUS' 
  AND AUDIT_PROPERTIES.AP_NEW_VALUE = 'Deferred'
GROUP BY
    AUDIT_LOG.AU_ENTITY_ID,AUDIT_LOG.AU_USER
),

WITH BUG_LIST AS
(
SELECT BUG.BG_BUG_ID/*Defect.Defect ID*/, BUG.BG_DETECTION_DATE /*Defect.Detected on Date*/,  BUG.BG_USER_01 /*Defect.Application*/, BUG.BG_SEVERITY /*Defect.Severity*/, BUG.BG_STATUS /*Defect.Status*/,  BUG.BG_USER_11 /*Defect.Planned Closing Date*/,  BUG.BG_DETECTED_BY /*Defect.Detected By*/
FROM   BUG /*Defect*/
WHERE  BUG.BG_USER_17 /*Defect.Finding Group*/ = 'UAT'
ORDER BY  BUG.BG_DETECTION_DATE ASC
)

SELECT *
FROM BUG_LIST
INNER JOIN AUDIT ON AUDIT.DEFECT_ID = BUG_LIST.BG_BUG_ID

Запрос «AUDIT» ищет любую ошибку в QC, статус которой в какой-то момент был изменен на «Отложено». Он содержит ошибки всех команд, использующих HPQC. Запрос «BUG_LIST» специально ищет ошибки, обнаруженные группой «UAT». Я могу запускать каждый запрос отдельно и пытаюсь объединить их, чтобы получить список ошибок, найденных с помощью «UAT». Если ошибка, обнаруженная UAT, имеет связанное с ней отложенное изменение статуса даты, отобразите эту информацию, а если нет, оставьте эту информацию пустой для конкретного дефекта.

Причина, по которой я пытаюсь это сделать, заключается в том, что любые ошибки, переходящие в статус «Отложено», не имеют «запланированной даты закрытия», как закрытые ошибки. Из-за этого, а не дату закрытия, я хотел бы видеть дату, когда ошибка перешла в статус отсрочки, и считать ее моей «датой закрытия».

HPQC не поддерживает операторы "WITH"? Есть ли способ успешно объединить и выполнить эти запросы?


person pkracer    schedule 05.12.2012    source источник
comment
Я считаю, что СО появилось в 9i.   -  person EvilTeach    schedule 06.12.2012


Ответы (2)


Вам нужно, чтобы with появилось только один раз, поэтому удалите with перед BUG_LIST:

   WITH AUDIT AS
(
SELECT
AUDIT_LOG.AU_ENTITY_ID AS DEFECT_ID,
MIN(AUDIT_LOG.AU_TIME) AS Date_Deferred,
AUDIT_LOG.AU_USER AS UserName_Deferred
FROM AUDIT_LOG
INNER JOIN AUDIT_PROPERTIES
ON AUDIT_LOG.AU_ACTION_ID = AUDIT_PROPERTIES.AP_ACTION_ID
WHERE AUDIT_LOG.AU_ENTITY_TYPE = 'BUG' AND AUDIT_LOG.AU_ACTION = 'UPDATE' AND AUDIT_PROPERTIES.AP_TABLE_NAME = 'BUG' AND AUDIT_PROPERTIES.AP_FIELD_NAME = 'BG_STATUS' AND AUDIT_PROPERTIES.AP_NEW_VALUE = 'Deferred'
GROUP BY
AUDIT_LOG.AU_ENTITY_ID,AUDIT_LOG.AU_USER
),

    BUG_LIST AS
(
SELECT BUG.BG_BUG_ID/*Defect.Defect ID*/, BUG.BG_DETECTION_DATE /*Defect.Detected on Date*/,  BUG.BG_USER_01 /*Defect.Application*/, BUG.BG_SEVERITY /*Defect.Severity*/, BUG.BG_STATUS /*Defect.Status*/,  BUG.BG_USER_11 /*Defect.Planned Closing Date*/,  BUG.BG_DETECTED_BY /*Defect.Detected By*/
FROM   BUG /*Defect*/
WHERE  BUG.BG_USER_17 /*Defect.Finding Group*/ = 'UAT'
ORDER BY  BUG.BG_DETECTION_DATE ASC
)

SELECT *
FROM BUG_LIST
INNER JOIN AUDIT ON AUDIT.DEFECT_ID = BUG_LIST.BG_BUG_ID

Вы всегда можете объединить их в один оператор from, используя подзапросы:

select *
from (your bug_list query here) bl inner join
     (your audit query here) a
     on a.defect_id = bl.bd_bug_id
person Gordon Linoff    schedule 05.12.2012
comment
Я думал о том же, но я обновил его и все еще получаю ту же ошибку. Любые другие идеи? - person pkracer; 06.12.2012
comment
можно отметить, что порядок в BUG_LIST на самом деле не имеет никакого эффекта, кроме увеличения времени выполнения запроса. - person EvilTeach; 06.12.2012
comment
@EvilTeach . . . Будет ли он работать дольше, зависит от механизма SQL. Во многих случаях order by в подзапросах просто игнорируется. - person Gordon Linoff; 06.12.2012
comment
Я приму это к сведению. Запросы по отдельности занимают всего несколько секунд. - person pkracer; 06.12.2012

WITH обычно используется для повторного использования одного из предложений with. В данном случае он не нужен, поэтому запрос можно было бы переписать примерно так. (у меня нет возможности проверить это)

SELECT audit.*, bug_list.*
FROM 
(
    SELECT BUG.BG_BUG_ID/*Defect.Defect ID*/, 
           BUG.BG_DETECTION_DATE /*Defect.Detected on Date*/,  
           BUG.BG_USER_01 /*Defect.Application*/, 
           BUG.BG_SEVERITY /*Defect.Severity*/, 
           BUG.BG_STATUS /*Defect.Status*/,  
           BUG.BG_USER_11 /*Defect.Planned Closing Date*/,  
           BUG.BG_DETECTED_BY /*Defect.Detected By*/
    FROM   BUG /*Defect*/
    WHERE  BUG.BG_USER_17 /*Defect.Finding Group*/ = 'UAT'
) BUG_LIST,
(
    SELECT AUDIT_LOG.AU_ENTITY_ID AS DEFECT_ID,
           MIN(AUDIT_LOG.AU_TIME) AS Date_Deferred,
           AUDIT_LOG.AU_USER AS UserName_Deferred
    FROM AUDIT_LOG
    INNER JOIN AUDIT_PROPERTIES
    ON AUDIT_LOG.AU_ACTION_ID = AUDIT_PROPERTIES.AP_ACTION_ID
    WHERE AUDIT_LOG.AU_ENTITY_TYPE = 'BUG' 
      AND AUDIT_LOG.AU_ACTION = 'UPDATE' 
      AND AUDIT_PROPERTIES.AP_TABLE_NAME = 'BUG' 
      AND AUDIT_PROPERTIES.AP_FIELD_NAME = 'BG_STATUS' 
      AND AUDIT_PROPERTIES.AP_NEW_VALUE = 'Deferred'
    GROUP BY
        AUDIT_LOG.AU_ENTITY_ID,AUDIT_LOG.AU_USER
) AUDIT
INNER JOIN AUDIT 
ON AUDIT.DEFECT_ID = BUG_LIST.BG_BUG_ID
ORDER BY  BUG_list.BG_DETECTION_DATE ASC
person EvilTeach    schedule 05.12.2012
comment
Спасибо за ответ. Запрос выполняется с другой ошибкой. ORA-00936: отсутствует выражение. - person pkracer; 06.12.2012