pl / sql:连接后提取?

时间:2015-12-15 09:39:33

标签: plsql clob wm-concat

select wm_concat(COLUMN_NAME) A FROM ALL_TAB_COLUMNS where table_name like 'T_EMPLOYEE';     

如何从A中提取数据并将其分配给另一个varchar2变量?

2 个答案:

答案 0 :(得分:1)

如果您只需将其存储在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变量中。

答案 1 :(得分:0)

我知道已经有一个已接受的答案,但只有FYI,如果您的版本在12c上升级, wm_concat 将无效。

您可以使用 LISTAGG 作为替代方案,以免为何使用未记录的功能。Read this

只是说。

干杯=)