Итак, вы хотите скопировать данные между двумя таблицами, описания которых совпадают, верно? Если да, то вы немного усложняете его. Вот более простой пример.
Сначала тестовый пример:
SQL> create table cars1 as select * From dept;
Table created.
SQL> create table cars2 as select * From dept where 1 = 2;
Table created.
SQL> select * from cars1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * From cars2;
no rows selected
Процедура:
SQL> create or replace procedure pers (tsource in varchar2, ttarget in varchar2) is
2 begin
3 execute immediate 'insert into ' || dbms_assert.sql_object_name(ttarget) ||
4 ' select * from ' || dbms_assert.sql_object_name(tsource);
5 end;
6 /
Procedure created.
Тестирование:
SQL> exec pers('cars1', 'cars2');
PL/SQL procedure successfully completed.
SQL> select * from cars2;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>