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

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

4

2 回答 2

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 变量中。

于 2015-12-15T10:07:45.417 回答
0

我知道已经有一个公认的答案,但仅供参考,如果您的版本在 12c 上升级,wm_concat将不起作用。

您可以使用LISTAGG作为替代方案,那么为什么还要使用未记录的功能。读这个

只是说。

干杯 =)

于 2015-12-16T09:00:50.680 回答