2013-03-08 30 views
8

Ich benutze SQL Developer 3.1.07 auf einer 11g Datenbank Wenn ich Listagg verwenden, um mehrere Werte aus einem Feld zu extrahieren, bekomme ich ein Leerzeichen zwischen jedem Zeichen in den Ergebnissen für Die Spalte listagg. Die Abfrage gibt alle Werte zurück, die ich zu sehen erwarte, es sind nur die zusätzlichen Leerzeichen, die mich verrückt machen. Irgendwelche Gedanken? HierOracle SQL Developer 3.1.07 zusätzliche Leerzeichen zwischen Zeichen mit listagg

ist eine Abfrage, die ich verwendet habe, aber es passiert immer wenn ich verwenden listagg in einer Abfrage:

select a.personnum Emp_ID 
     , a.personfullname Name 
     , a.companyhiredtm Hire_Date 
     , a.employmentstatus Status 
     , a.employmentstatusdt Status_Date 
     , h.Supervisor, h.Agency 
from vp_employeev42 a 
    left outer join (select f.personid 
          , listagg (g.personcstmdatatxt, ',') within group 
           (order by g.customdatadefid) Supervisor 
        from vp_employeev42 f 
        left outer join personcstmdata g 
         on f.personid = g.personid 
        where f.personnum like 'T%' 
        and f.homelaborlevelnm3 = '1872' 
        and (g.customdatadefid = '1' 
          or g.personcstmdatatxt is null) 
        group by f.personid) h 
      on a.personid = h.personid 
    left outer join (select f.personid 
         , listagg (g.personcstmdatatxt, ',') 
           within group (order by g.customdatadefid) Agency 
        from vp_employeev42 f 
        left outer join personcstmdata g 
          on f.personid = g.personid 
        where f.personnum like 'T%' 
        and homelaborlevelnm3 = '1872' 
        and (g.customdatadefid = '3' 
           or g.personcstmdatatxt is null) 
         group by f.personid) h 
     on a.personid = h.personid 
where personnum like 'T%' 
and homelaborlevelnm3 = '1872' 
order by personnum; 

Hier sind die Ergebnisse erhalte ich:

EMP_ID,NAME,HIRE_DATE,STATUS,STATUS_DATE,SUPERVISOR,AGENCY 
T98999,Lxxxxm, Lxxxn,20-SEP-12,Active,20-SEP-12,, S t a f f m a r k 

T98989,Fxxxxn, Dxxxxa,10-DEC-12,Active,10-DEC-12,, S t a f f m a r k 

T99989,Hxxxs, Cxxxxxa,02-OCT-12,Active,02-OCT-12,, S t a f f m a r k 
T99999,Hxxxs, Dxxxn,30-JAN-12,Terminated,21-MAY-12, C x x x x x x x x x r T x x x x r, P R O L O G I S T I X 
+0

Bitte posten Sie in Zukunft einen * kleinen reproduzierbaren * Testfall anstelle eines großen Teils schwer verständlichen Codes. Abgesehen von allem anderen bietet die Tatsache, ein Problem auf das Wesentliche zu bringen, oft die Lösung, die der beste Weg zum Lernen ist. – APC

Antwort

13

verwenden Sie UTF-16 + NVARCHAR2 durch Zufall? zB dies:

SQL> select * from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET'; 

PARAMETER      VALUE 
------------------------------ ---------------------------------------- 
NLS_NCHAR_CHARACTERSET   AL16UTF16 

SQL> drop table test; 

Table dropped. 

SQL> create table test(a nvarchar2(10)); 

Table created. 

SQL> insert into test values ('test'); 

1 row created. 

SQL> insert into test values ('test 2'); 

1 row created. 

SQL> select listagg(a, ',') within group (order by 1) from test group by 1; 

LISTAGG(A,',')WITHINGROUP(ORDERBY1) 
-------------------------------------------------------------------------------- 
t e s t, t e s t 2 

können Sie zu einem char umwandeln, um dies zu umgehen. Wenn dies nicht möglich ist, müssen Sie ein Ticket mit Oracle-Support anfordern.

SQL> select listagg(to_char(a),',') within group (order by 1) from test group by 1; 

LISTAGG(TO_CHAR(A),',')WITHINGROUP(ORDERBY1) 
-------------------------------------------------------------------------------- 
test,test 2 

SQL> 
+0

Das war der Trick, ich benutze UTF-16 + NVARCHAR2 und To_char tat es. Vielen Dank für die Hilfe. –

5

Dies ist derzeit ein bekannter Fehler ohne fix:

Bug 13.501.087 11.2.0.3 RDBMS 11.2.0.3 SQL EXECUTION PRODID-5 Portid-226

Abstract: LISTAGG RETURN STRANGE DATA

*** 12/14/11 05:12 am *** (ADD: Impact/Symptom->WRONG RESULTS) 

    SubComponent: SQL Analytics 
    =========================== 
    DETAILED PROBLEM DESCRIPTION 
    ============================ 
    When using LISTAGG function with NVARCHAR , data is returned with spaces 
    between characters 
Verwandte Themen