You can use UNION to have separate lines for each address value.
For example, let's say you have a line built in a with clause:
SQL> WITH DATA(EMP_NAME,EMP_ADDR1,EMP_ADDR2,EMP_ADDR3) AS( 2 SELECT 'Covey, Stephen J, Mr', 1, 2, 4 FROM DUAL UNION ALL 3 SELECT 'Jhon, Abraham A, Mr ', 1, 2, 4 FROM DUAL 4 ) 5 SELECT * FROM DATA; EMP_NAME EMP_ADDR1 EMP_ADDR2 EMP_ADDR3 -------------------- ---------- ---------- ---------- Covey, Stephen J, Mr 1 2 4 Jhon, Abraham A, Mr 1 2 4 SQL>
Now you can split the specified string into multiple lines using UNION . Another effort is to use SUBSTR and INSTR to extract the name from emp_name.
For instance,
SQL> WITH DATA(EMP_NAME,EMP_ADDR1,EMP_ADDR2,EMP_ADDR3) AS( 2 SELECT 'Covey, Stephen J, Mr', 1, 2, 4 FROM DUAL UNION ALL 3 SELECT 'Jhon, Abraham A, Mr ', 1, 2, 4 FROM DUAL 4 ) 5 SELECT SUBSTR(emp_name, instr(emp_name, ',', 1, 1)+1, instr(emp_name, ' ', 1, 2) - instr(emp_name, ',', 1, 1)) AS "ename", 6 emp_addr1 AS "addr" 7 FROM DATA 8 UNION ALL 9 SELECT SUBSTR(emp_name, instr(emp_name, ',', 1, 1)+1, instr(emp_name, ' ', 1, 2) - instr(emp_name, ',', 1, 1)), 10 emp_addr2 11 FROM DATA 12 UNION ALL 13 SELECT SUBSTR(emp_name, instr(emp_name, ',', 1, 1)+1, instr(emp_name, ' ', 1, 2) - instr(emp_name, ',', 1, 1)), 14 emp_addr3 15 FROM DATA 16 / ename addr -------------------- ---------- Stephen 1 Abraham 1 Stephen 2 Abraham 2 Stephen 4 Abraham 4 6 rows selected. SQL>
NOTE :
The WITH clause is used only to create sample data for a demonstration purpose. In the real case, you just need to use the SELECT statement in your table.
INSERT INTO hist_table SELECT statement as shown above...