Почему LISTAGG в Oracle 12 не принимает мой разделитель?

Я пытаюсь создать массив в одной ячейке с помощью функции LISTAGG(). Ниже у меня есть запрос, который я использую, чтобы попытаться получить следующий результат.

SELECT 
    x, y,
    LISTAGG(VALUE, '; ') WITHIN GROUP (ORDER BY VALUE) AS z
FROM 
    MV_SHARED_TABLE
WHERE 
    y = 'multi_MVL'
GROUP BY 
    x, y

Желаемый результат:

x, y, z (1; 2; 3; 4)
x1, y1, z (1; 2; 3; 4)

Моя проблема в том, что когда я запускаю запрос, кажется, что он имеет правильную информацию, за исключением выбранного мной разделителя (;).

Вместо этого я просто получаю простую запятую (,) в качестве разделителя.

Все это происходит через DBVisualizer и подключение к базе данных Oracle.

Спасибо!


person PyMan718    schedule 04.04.2018    source источник
comment
ваш разделитель - это просто точка с запятой;   -  person OldProgrammer    schedule 04.04.2018
comment
@OldProgrammer в запросе, который я указываю для точки с запятой, но вместо этого возвращается с запятой.   -  person PyMan718    schedule 04.04.2018
comment
А откуда z?   -  person Gordon Linoff    schedule 04.04.2018
comment
Можете ли вы воспроизвести это в другом клиенте, желательно в SQL * Plus? Или вы уже думаете / знаете, что это проблема DBVisualizer? Также может помочь включение выборочных данных и результатов сопоставления (MCVE).   -  person Alex Poole    schedule 04.04.2018
comment
@GordonLinoff z берется из той же таблицы, что и x и y. возвращаемое значение VALUE будет переименовано в Z, и это будет массив строк. Разделитель - это часть, которая не работает.   -  person PyMan718    schedule 04.04.2018
comment
@AlexPoole Я не пробовал использовать другой клиент, но я могу сделать это позже, когда у меня будет такая возможность!   -  person PyMan718    schedule 04.04.2018


Ответы (1)


У меня нормально работает на 12c:

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE    12.1.0.2.0      Production
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

SQL> create table my_shared_table(x varchar2(10), y varchar2(10), value number);

Table created.

SQL>
SQL> insert into my_shared_table
  2    select 'x', 'y', 1 from dual union
  3    select 'x', 'y', 2 from dual union
  4    select 'x', 'y', 3 from dual union
  5    select 'x', 'y', 4 from dual union
  6    --
  7    select 'x1', 'y1', 5 from dual union
  8    select 'x1', 'y1', 6 from dual union
  9    select 'x1', 'y1', 7 from dual union
 10    select 'x1', 'y1', 8 from dual;

8 rows created.

SQL>
SQL> select x, y, listagg(value, '; ') within group (order by value) as z
  2  from my_shared_table
  3  group by x, y;

X          Y          Z
---------- ---------- --------------------
x          y          1; 2; 3; 4
x1         y1         5; 6; 7; 8

SQL>
person Littlefoot    schedule 05.04.2018
comment
что очень странно, так это то, что как только я переподключился к БД, разделитель начал работать нормально. Никаких изменений. - person PyMan718; 05.04.2018