2016-11-10 3 views
3
SELECT e.pem_id   AS id, 
    e.pem_subject  AS subject, 
    e.pem_content  AS content, 
    e.pem_sent_date AS sentdate, 
    e.pem_ref_id  AS referenceid, 
    e.pem_from_usr_id AS userid, 
    NULL    AS misc, 
    (listagg(str.str_us_id, ', ') within GROUP(ORDER BY '') AS attachedusers FROM 
     proj_email_usrs eu LEFT OUTER JOIN st_register str ON 
     eu.pmu_str_id = str.str_id WHERE eu.pmu_pem_id = '26' GROUP BY '') 
FROM proj_email e 
WHERE e.pem_prj_id = '33' 
AND e.pmu_pem_id = '26' 
AND e.pem_status = 'S'; 

Он бросает ошибку какOracle Listagg Sub запрос

ORA-01722: неправильный номер

01722. 00000 - "неверный номер"

* Причина: Указанный номер был инвалид.

* Действие: Укажите действительный номер.

+0

Я полагаю, что обратные тики на самом деле не в вашем запросе. –

ответ

4

Я предполагаю, что вы хотите запрос, как это:

SELECT E.PEM_ID as Id, E.PEM_SUBJECT as Subject, E.PEM_CONTENT as Content, 
     E.PEM_SENT_DATE as SentDate, E.PEM_REF_ID as ReferenceId, 
     E.PEM_FROM_USR_ID as UserId, NULL as Misc, 
     (SELECT LISTAGG(STR.STR_US_ID, ', ') WITHIN GROUP (ORDER BY STR.STR_US_ID) 
     FROM PROJ_EMAIL_USRS EU LEFT OUTER JOIN 
      ST_REGISTER STR 
      ON EU.PMU_STR_ID = STR.STR_ID 
     WHERE EU.PMU_PEM_ID = E.PMU_PEM_ID -- Correlation clause 
     ) as AttachedUsers 
FROM PROJ_EMAIL E 
WHERE E.PEM_PRJ_ID = 33 AND E.PMU_PEM_ID = 26 AND E.PEM_STATUS = 'S' ; 

Комментарии:

  • Добавлена ​​SELECT перед тем LISTAGG(). Требуется для подзапроса.
  • Удалить GROUP BY. Не требуется, потому что вы хотите, чтобы подзапрос всегда возвращал одну строку.
  • Удалены одинарные кавычки из констант, которые, вероятно, являются числами. Используйте только одинарные кавычки для констант строк и дат.
  • Добавлен параметр корреляции для подзапроса.
  • Перемещено имя столбца вне подзапроса, поэтому оно именовано в результате.
  • Добавлен столбец ORDER BY для WITHIN GROUP. Не обязательно, но разумно держать иды в порядке.
+0

Ты сделал мой день :) Спасибо ... отлично работает ... Вы объяснили причины, по которым это похвально. – Emperor

Смежные вопросы