Oracle PL/SQL Variable Record Field Names
You can't assign a record field dynamically.
You could use an INDEX-BY PL/SQL Table (associative array) but its type has to be known in advance. You could use a dynamic RECORD containing all majors types and you could decide at run-time which field to use (VARCHAR2, DATE...) but that would be rather tedious.
Instead I suggest you use dynamic SQL since you know at run-time all column names and we can suppose that the column types are compatible.
Something like this should work (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