Как выровнять вложенные таблицы в новый ряд?

У меня есть таблица, где один из столбцов содержит вложенную таблицу из одной строки.

mytable 
title | col
a     | {1, 2}
b     | {3}
c     | NULL

Что мне нужно сделать, это объединить вложенную таблицу в разделенную запятыми строку.

Result:
{
    a: "1, 2"
    b: "3"
    c: NULL
}  

Для моей конкретной цели я не могу просто получить результат в виде таблицы (приведенное выше очень упрощено, но это решило бы мою проблему). Самое близкое, я думаю, я получил со следующим утверждением (которое только что вернуло 1, 2, 3, ноль).

select t.* 
from mytable, table(mytable.col)(+) t;

я пробовал listagg, но не смог заставить его работать в моем случае. В настоящее время я пытаюсь прочитать больше во вложенных таблицах, но это происходит медленно, и я не смог найти ничего для этой конкретной проблемы (вложенные таблицы).

1 ответ

Решение

Делает ли это то, что вам нужно? Что вы имеете в виду, Listagg не работал для ваших целей?

CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
/
CREATE TABLE nested_table (id NUMBER, col1 my_tab_t)
       NESTED TABLE col1 STORE AS col1_tab;

INSERT INTO nested_table VALUES (1, my_tab_t('A'));
INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C'));
INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F'));

 SELECT TMP.id,
        listagg(Column_Value,',') 
          WITHIN GROUP(ORDER BY Column_Value)
   FROM (SELECT id, 
                COLUMN_VALUE 
           FROM nested_table t1, 
                TABLE(t1.col1) t2
        ) TMP
  GROUP
     BY id

http://sqlfiddle.com/

Другие вопросы по тегам