您不能动态分配记录字段。
您可以使用INDEX-BY PL/SQL 表(关联数组),但必须事先知道其类型。您可以使用包含所有专业类型的动态 RECORD,并且可以在运行时决定使用哪个字段(VARCHAR2、DATE...),但这会相当乏味。
相反,我建议您使用动态 SQL,因为您在运行时知道所有列名,并且我们可以假设列类型是兼容的。
像这样的东西应该可以工作(11gR2):
-- SETUP
-- CREATE TABLE T_KONF(C_IN VARCHAR2(30), C_OUT VARCHAR2(30));
-- INSERT INTO T_KONF VALUES ('C1', 'C2');
-- INSERT INTO T_KONF VALUES ('C2', 'C3');
SQL> DECLARE
2 l_sql LONG;
3 BEGIN
4 SELECT 'INSERT INTO t_out (' ||
5 listagg(dbms_assert.simple_sql_name('"'||t_konf.c_out||'"'),
6 ', ') WITHIN GROUP (ORDER BY t_konf.rowid)
7 || ' )
8 SELECT ' ||
9 listagg(dbms_assert.simple_sql_name('"'||t_konf.c_in||'"'),
10 ', ') WITHIN GROUP (ORDER BY t_konf.rowid)
11 || '
12 FROM t_in
13 WHERE 1 = 1' -- custom where clause
14 INTO l_sql
15 FROM t_konf;
16 DBMS_OUTPUT.put_line(l_sql);
17 -- EXECUTE IMMEDIATE (l_sql); -- uncomment when SQL is OK
18 END;
19 /
INSERT INTO t_out ("C3", "C2" )
SELECT "C2", "C1"
FROM t_in
WHERE 1 = 1