Comment puis-je supprimer CHR (0) à partir de chaînes lors de l'utilisation LISTAGG dans Oracle DB?

voix
0

Je suis en train d'interroger une base de données Oracle et obtenir une liste de noms dans une seule cellule du résultat.

J'ai une requête comme suit qui produit les noms dans des lignes distinctes:

SELECT (lastname || ', ' || firstname) as fullname
FROM users
WHERE {some condition}

-- result --    
    fullname
Anderson, Alex
Baker, Bob
Clark, Carl

Cependant, quand j'essaie d'utiliser LISTAGG pour concaténer les lignes que je reçois l'erreur suivante:

SELECT LISTAGG(fullname, '; ') WITHIN GROUP (ORDER BY fullname) as instructors
FROM
(
    SELECT (lastname || ', ' || firstname) as fullname
    FROM users
    WHERE {some condition}
)

-- desired result --
    instructors
Anderson, Alex; Baker, Bob; Clark, Carl

-- actual result --
Error Type: System.Xml.XmlException
Error Message: hexadecimal value 0x00, is an invalid character. Line 1, position 32.

Notez que si j'utilise LISTAGG sur une chaîne faite à partir concaténer INT, la requête fonctionne comme prévu:

SELECT LISTAGG(fullname, '; ') WITHIN GROUP (ORDER BY fullname) as instructors
FROM
(
    SELECT (pk1 || ', ' || pk1) as fullname    -- pk1 is the users primary key
    FROM users
    WHERE {some condition}
)

-- result --
    instructors
01, 01; 02, 02; 03, 03

Je soupçonne que le problème est que les champs sont FirstName et LastName nulle terminaison et LISTAGG ne supprime pas correctement les caractères nuls du résultat. Je ne sais pas comment je peux supprimer les caractères nuls du résultat de la requête intérieure bien.

Notez que ceci est la base de données d'un client et je ne suis pas autorisé à modifier son contenu. Je dois être capable de lire les champs dans leur format actuel et produire la sortie désirée.

Créé 20/10/2018 à 03:14
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

J'ai eu le même problème. La solution pour moi était:

SELECT replace(LISTAGG(fullname, '; ') WITHIN GROUP (ORDER BY fullname), chr(0)) as instructors 
Créé 31/10/2018 à 15:37
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more