sql >> Database teknologi >  >> RDS >> Oracle

ORACLE SQL LISTAGG returnerer ikke forventet resultat

Dette ser ud til at være relateret til fejl 19461687 og dette tidligere spørgsmål . Hvis du dumper den aggregerede værdi fra din forespørgsel i 11gR2 eller 12cR1, ser du:

LISTAGG_OUTPUT
--------------------------------------------------------------------------------------------------
Typ=1 Len=25 CharacterSet=AL32UTF8: 0,41,0,52,0,34,0,30,0,30,0,31,2c,0,41,0,52,0,34,0,30,0,30,0,32
 

I SQL*Plus og SQL Developer vises den faktiske værdi som:

LISTAGG_OUTPUT
----------------------------------------
 A R 4 0 0 1, A R 4 0 0 2
 

og du kan ikke kopiere værdien fra SQL Developer. (I 12cR2 vises nullerne ikke længere i dumpet, værdien vises uden mellemrum, og du kan kopiere den, så fejlen ser ud til at være rettet.)

Disse null-bytes ser ud til at få Toad til slet ikke at vise værdien, formentlig fordi den ser den første null-byte og behandler den som en strengterminator (eller noget i den retning alligevel).

SQL Fiddle ser ud til at klare dette, men db<>fiddle ser også ud til at have et problem med det og returnerer ikke noget for hele violinen, når den forespørgsel er til stede.

Du kan omdefinere din tabelkolonne som varchar2 i stedet for nvarchar2 , men jeg antager, at det er den datatype af en grund, så det er nok ikke praktisk.

Så du kunne caste det som en del af forespørgslen i stedet:

SELECT LISTAGG(CAST(MOD_CODE AS VARCHAR2(12)),',') WITHIN GROUP (ORDER BY MOD_CODE) LISTAGG_OUTPUT FROM XOTEST_A WHERE MOD_CODE IN ('AR4001','AR4002'); LISTAGG_OUTPUT ---------------------------------------- AR4001,AR4002

Eller se om patchen til fejl 19461687 løser problemet for dig.



  1. MySQL JOIN Flere Joins på samme bord?

  2. RoR Postgresql tidszonegruppe ved ikke at arbejde på Heroku

  3. Unicode escape-sekvens i kommandolinje MySQL

  4. Adskil MYSQL-resultater i separate HTML-tabeller