Я пытаюсь запросить базу данных оракула и получить список имен в одной ячейке результата.
У меня есть запрос, подобный следующему, который производит имена в отдельных строках:
SELECT (lastname || ', ' || firstname) as fullname
FROM users
WHERE {some condition}
-- result --
fullname
Anderson, Alex
Baker, Bob
Clark, Carl
Однако, когда я пытаюсь использовать LISTAGG для объединения этих строк, я получаю следующую ошибку:
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.
Обратите внимание, что если я использую LISTAGG для строки, составленной из конкатенации значений INT, запрос работаеткак и ожидалось:
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
Я подозреваю, что проблема заключается в том, что поля имени и фамилии заканчиваются нулем, а LISTAGG неправильно удаляет пустые символы из результата.Я не уверен, как я могу удалить нулевые символы из результата внутреннего запроса.
Обратите внимание, что это база данных клиента, и мне не разрешено изменять ее содержимое.Мне нужно иметь возможность читать поля в их текущем формате и производить желаемый вывод.