pl/sql: извлечь после объединения?
select wm_concat(COLUMN_NAME) A FROM ALL_TAB_COLUMNS where table_name like 'T_EMPLOYEE';
Как извлечь данные из A
и назначить его другому varchar2
переменная?
2 ответа
Решение
Если вам просто нужно сохранить его в переменной VARCHAR2 для дальнейшей обработки, вы можете сделать это примерно так:
DECLARE
BUFF_V VARCHAR2(2000); -- make sure there's enough space or add some substr
BEGIN
SELECT wm_concat(COLUMN_NAME)
INTO BUFF_V
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME LIKE 'T_EMPLOYEE';
END;
Если вы не хотите заниматься анализом wm_concat, вы можете просто использовать что-то вроде:
DECLARE
COL_V VARCHAR2(100);
BEGIN
FOR QUERY_C IN (select COLUMN_NAME FROM ALL_TAB_COLUMNS where table_name like 'T_EMPLOYEE') LOOP
COL_V := QUERY_C.COLUMN_NAME;
-- do whatever you want with COL_V
END LOOP;
END;
Это будет повторять все результаты (все имена столбцов таблицы T_EMPLOYEE), сохраняя их в переменной COL_V.
Я знаю, что уже есть принятый ответ, но только к вашему сведению, wm_concat не будет работать, если ваша версия обновлена на 12c.
Вы можете использовать LISTAGG в качестве альтернативы, так зачем использовать недокументированную функцию. Прочитай это
Просто говорю.
Ура =)