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 в качестве альтернативы, так зачем использовать недокументированную функцию. Прочитай это

Просто говорю.

Ура =)

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