pl/sql : 连接后提取?
pl/sql : extract after concatenated?
select wm_concat(COLUMN_NAME) A FROM ALL_TAB_COLUMNS where table_name like 'T_EMPLOYEE';
如何从 A
中提取数据并将其分配给另一个 varchar2
变量?
如果您只需要将其存储在 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;
这将迭代所有结果(table T_EMPLOYEE 的所有列名)并将它们存储在 COL_V 变量中。
我知道已经有一个可接受的答案,但仅供参考,如果您的版本在 12c 上升级,wm_concat 将不起作用。
您可以使用 LISTAGG 作为替代方案,所以为什么要费心使用未记录的功能。Read this
随便说说。
干杯=)
select wm_concat(COLUMN_NAME) A FROM ALL_TAB_COLUMNS where table_name like 'T_EMPLOYEE';
如何从 A
中提取数据并将其分配给另一个 varchar2
变量?
如果您只需要将其存储在 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;
这将迭代所有结果(table T_EMPLOYEE 的所有列名)并将它们存储在 COL_V 变量中。
我知道已经有一个可接受的答案,但仅供参考,如果您的版本在 12c 上升级,wm_concat 将不起作用。
您可以使用 LISTAGG 作为替代方案,所以为什么要费心使用未记录的功能。Read this
随便说说。
干杯=)