为什么Oracle 12中的LISTAGG不接受我的分隔符?

时间:2018-04-04 18:28:53

标签: sql oracle oracle12c listagg

我正在尝试使用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 DB。

谢谢!

1 个答案:

答案 0 :(得分:0)

在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>