2016-11-10 2 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'; 

Es Fehler alsOracle Listagg Sub-Abfrage

ORA-01722 wirft: ungültige Nummer

01722. 00000 - "ungültige Nummer"

* Ursache: Die angegebene Zahl war ungültig.

* Aktion: Geben Sie eine gültige Nummer an.

+0

Ich nehme an, die hinteren Ticks sind nicht wirklich in Ihrer Abfrage. –

Antwort

4

Ich nehme an, Sie eine Abfrage wie folgt wollen:

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' ; 

Kommentare:

  • Added der SELECT vor LISTAGG(). Wird für eine Unterabfrage benötigt.
  • Entfernen Sie GROUP BY. Nicht erforderlich, weil die Unterabfrage immer eine Zeile zurückgeben soll.
  • Einfache Anführungszeichen von Konstanten entfernt, die wahrscheinlich Zahlen sind. Verwenden Sie nur einfache Anführungszeichen für String- und Datumskonstanten.
  • Eine Korrelationsklausel zur Unterabfrage hinzugefügt.
  • Der Name der Spalte wurde außerhalb der Unterabfrage verschoben, daher wird sie im Ergebnis benannt.
  • Eine ORDER BY Spalte für WITHIN GROUP hinzugefügt. Nicht notwendig, aber vernünftig, um die IDs in Ordnung zu halten.
+0

Du hast meinen Tag gemacht :) Danke ... funktioniert gut ... Du hast die Gründe dafür erklärt, dass es lobenswert ist. – Emperor

Verwandte Themen