Это просто демонстрация способа достичь того, о чем вы просили. (Предполагая, что я не понял неправильно то, что вы просили.)
Сначала немного подготовьтесь.
- Создайте таблицу
DA
(в соответствии с данными примера в вашем вопросе).
create table DA (COL1 char(1), COL2 char(1), COL3 char(1));
Добавить строки в таблицу (опять же, в соответствии с примерами данных в вашем вопросе).
insert into DA values ('a','b','c');
insert into DA values ('1','2','3');
insert into DA values ('x','y','z');
Я понимаю, что вы хотите вставить данные из таблицы
DA
в другую таблицу, поэтому я создал вторую таблицу базы данных в соответствии с тем, что я понял из вашего вопроса.
create table RESULT (ONE_COL char(5));
PL / SQL код, который извлекает имена столбцов (при условии, что вы знаете имя таблицы) из словаря данных, а затем создает динамический c курсор для извлечения значений из этой таблицы (снова в описанном формате в вашем вопросе) и вставляет строки, извлеченные динамическим c курсором, во вторую таблицу базы данных (поскольку это ваше требование, как я понял из вашего вопроса).
declare
L_COL varchar2(128);
L_CUR sys_refcursor;
L_ONE char(5);
L_SQL varchar2(2000);
--
cursor C_COLS is
select COLUMN_NAME
from USER_TAB_COLUMNS
where TABLE_NAME = 'DA';
begin
L_SQL := 'select ';
open C_COLS;
fetch C_COLS into L_COL;
L_SQL := L_SQL || L_COL;
while C_COLS%found
loop
fetch C_COLS into L_COL;
if C_COLS%found then
L_SQL := L_SQL || '||';
L_SQL := L_SQL || '''|''||';
L_SQL := L_SQL || L_COL;
end if;
end loop;
close C_COLS;
L_SQL := L_SQL || ' from DA';
open L_CUR for L_SQL;
loop
fetch L_CUR into L_ONE;
exit when L_CUR%notfound;
insert into RESULT values (L_ONE);
end loop;
close L_CUR;
end;
Наконец, после запуска вышеуказанного кода PL / SQL ...
select * from RESULT;
, который возвращает
ONE_C
-----
abc
123
xyz