OK, this is much better, but I'm still going to have to make some guesses here, because
a) ALTER TABLE par_test ADD (CONSTRAINT PAR_TESTPK1 PRIMARY KEY (a,y));
No idea what 'a' and 'y' area
b) ALTER TABLE scott.PAR_TEST ADD CONSTRAINT PAR_TESTPK1 PRIMARY KEY (ORDERREQUESTID);
No idea what 'orderrequestid' is
c) "But when create a trigger to call sequence no. Into empno it created..."
I'm not sure what you are askng here.
So here is what I am *assuming* is the question - that after you did the redefinition, an existing trigger to populate a column with sequence was not transferred over. So first we'll replicate that by editing your test case:
SQL> create table scott.test as select * from scott.emp;
Table created.
SQL> alter table scott.test add primary key ( empno) ;
Table altered.
SQL> create sequence scott.test_seq;
Sequence created.
SQL> create or replace trigger scott.test_trg
2 before insert on scott.test
3 for each row
4 begin
5 :new.empno := test_seq.nextval;
6 end;
7 /
Trigger created.
SQL> exec dbms_stats.gather_table_stats('scott','TEST');
PL/SQL procedure successfully completed.
SQL> CREATE TABLE scott.PAR_TEST
2 (
3 EMPNO NUMBER(4) PRIMARY KEY,
4 ENAME VARCHAR2(10),
5 JOB VARCHAR2(9),
6 MGR NUMBER(4),
7 HIREDATE DATE,
8 SAL NUMBER(7,2),
9 COMM NUMBER(7,2),
10 DEPTNO NUMBER(2)
11 )
12 PARTITION BY RANGE (HIREDATE)
13 (
14 PARTITION JFMA1980 VALUES LESS THAN (TO_DATE('30/04/1980', 'DD/MM/YYYY')),
15 PARTITION MJJA1980 VALUES LESS THAN (TO_DATE('30/08/1980', 'DD/MM/YYYY')),
16 PARTITION SOND1980 VALUES LESS THAN (TO_DATE('31/12/1980', 'DD/MM/YYYY')),
17 PARTITION JFMA1981 VALUES LESS THAN (TO_DATE('30/04/1981', 'DD/MM/YYYY')),
18 PARTITION MJJA1981 VALUES LESS THAN (TO_DATE('30/08/1981', 'DD/MM/YYYY')),
19 PARTITION SOND1981 VALUES LESS THAN (TO_DATE('31/12/1981', 'DD/MM/YYYY')),
20 PARTITION JFMA1982 VALUES LESS THAN (TO_DATE('30/04/1982', 'DD/MM/YYYY')),
21 PARTITION MJJA1982 VALUES LESS THAN (TO_DATE('30/08/1982', 'DD/MM/YYYY')),
22 PARTITION SOND1982 VALUES LESS THAN (TO_DATE('31/12/1982', 'DD/MM/YYYY')),
23 PARTITION JFMA1983 VALUES LESS THAN (TO_DATE('30/04/1983', 'DD/MM/YYYY')),
24 PARTITION MJJA1983 VALUES LESS THAN (TO_DATE('30/08/1983', 'DD/MM/YYYY')),
25 PARTITION SOND1983 VALUES LESS THAN (TO_DATE('31/12/1983', 'DD/MM/YYYY')),
26 PARTITION JFMA1984 VALUES LESS THAN (TO_DATE('30/04/1984', 'DD/MM/YYYY')),
27 PARTITION MJJA1984 VALUES LESS THAN (TO_DATE('30/08/1984', 'DD/MM/YYYY')),
28 PARTITION SOND1984 VALUES LESS THAN (TO_DATE('31/12/1984', 'DD/MM/YYYY'))
29 );
Table created.
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT','TEST');
PL/SQL procedure successfully completed.
SQL> BEGIN DBMS_REDEFINITION.start_redef_table
2 (
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL> insert into scott.test select * from scott.emp;
14 rows created.
SQL> commit;
Commit complete.
SQL> select * from scott.test;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
1 SMITH CLERK 7902 17-DEC-80 800 20
2 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
3 WARD SALESMAN 7698 22-FEB-81 1250 500 30
4 JONES MANAGER 7839 02-APR-81 2975 20
5 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
6 BLAKE MANAGER 7839 01-MAY-81 2850 30
7 CLARK MANAGER 7839 09-JUN-81 2450 10
8 SCOTT ANALYST 7566 09-DEC-82 3000 20
9 KING PRESIDENT 17-NOV-81 5000 10
10 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
11 ADAMS CLERK 7788 12-JAN-83 1100 20
12 JAMES CLERK 7698 03-DEC-81 950 30
13 FORD ANALYST 7566 03-DEC-81 3000 20
14 MILLER CLERK 7782 23-JAN-82 1300 10
28 rows selected.
SQL> BEGIN
2 DBMS_REDEFINITION.sync_interim_table(
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT COUNT(*) FROM scott.test;
COUNT(*)
----------
28
SQL>
SQL> SELECT COUNT(*) FROM scott.par_Test;
COUNT(*)
----------
28
SQL> exec dbms_stats.gather_table_stats('SCOTT','PAR_TEST');
PL/SQL procedure successfully completed.
SQL> BEGIN
2 dbms_redefinition.finish_redef_table(
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL> SELECT COUNT(*) FROM SCOTT.TEST;
COUNT(*)
----------
28
SQL> SELECT COUNT(*) FROM SCOTT.PAR_TEST;
COUNT(*)
----------
28
SQL> SELECT partition_name, num_rows FROM all_tab_partitions WHERE table_name = 'TEST' and table_owner = 'SCOTT
PARTITION_NAME NUM_ROWS
------------------------------ ----------
SOND1984 0
SOND1983 0
SOND1982 2
SOND1981 10
SOND1980 2
MJJA1984 0
MJJA1983 0
MJJA1982 0
MJJA1981 4
MJJA1980 0
JFMA1984 0
JFMA1983 2
JFMA1982 2
JFMA1981 6
JFMA1980 0
15 rows selected.
SQL> select owner, table_name from dba_triggers
2 where trigger_name = 'TEST_TRG';
OWNER TABLE_NAME
----------------------------------- -------------------------
SCOTT PAR_TEST
SQL> drop TABLE scott.par_test purge;
Table dropped.
So you can see the trigger did not get transferred over as part of the redefintion. That is *correct* because there is a separate routine for that.
Let's re-run the whole process with that extra step
SQL> drop table scott.test purge;
Table dropped.
SQL> create table scott.test as select * from scott.emp;
Table created.
SQL> alter table scott.test add primary key ( empno) ;
Table altered.
SQL> drop sequence scott.test_seq;
Sequence dropped.
SQL> create sequence scott.test_seq;
Sequence created.
SQL>
SQL> create or replace trigger scott.test_trg
2 before insert on scott.test
3 for each row
4 begin
5 :new.empno := test_seq.nextval;
6 end;
7 /
Trigger created.
SQL>
SQL>
SQL> exec dbms_stats.gather_table_stats('scott','TEST');
PL/SQL procedure successfully completed.
SQL>
SQL> CREATE TABLE scott.PAR_TEST
2 (
3 EMPNO NUMBER(4) PRIMARY KEY,
4 ENAME VARCHAR2(10),
5 JOB VARCHAR2(9),
6 MGR NUMBER(4),
7 HIREDATE DATE,
8 SAL NUMBER(7,2),
9 COMM NUMBER(7,2),
10 DEPTNO NUMBER(2)
11 )
12 PARTITION BY RANGE (HIREDATE)
13 (
14 PARTITION JFMA1980 VALUES LESS THAN (TO_DATE('30/04/1980', 'DD/MM/YYYY')),
15 PARTITION MJJA1980 VALUES LESS THAN (TO_DATE('30/08/1980', 'DD/MM/YYYY')),
16 PARTITION SOND1980 VALUES LESS THAN (TO_DATE('31/12/1980', 'DD/MM/YYYY')),
17 PARTITION JFMA1981 VALUES LESS THAN (TO_DATE('30/04/1981', 'DD/MM/YYYY')),
18 PARTITION MJJA1981 VALUES LESS THAN (TO_DATE('30/08/1981', 'DD/MM/YYYY')),
19 PARTITION SOND1981 VALUES LESS THAN (TO_DATE('31/12/1981', 'DD/MM/YYYY')),
20 PARTITION JFMA1982 VALUES LESS THAN (TO_DATE('30/04/1982', 'DD/MM/YYYY')),
21 PARTITION MJJA1982 VALUES LESS THAN (TO_DATE('30/08/1982', 'DD/MM/YYYY')),
22 PARTITION SOND1982 VALUES LESS THAN (TO_DATE('31/12/1982', 'DD/MM/YYYY')),
23 PARTITION JFMA1983 VALUES LESS THAN (TO_DATE('30/04/1983', 'DD/MM/YYYY')),
24 PARTITION MJJA1983 VALUES LESS THAN (TO_DATE('30/08/1983', 'DD/MM/YYYY')),
25 PARTITION SOND1983 VALUES LESS THAN (TO_DATE('31/12/1983', 'DD/MM/YYYY')),
26 PARTITION JFMA1984 VALUES LESS THAN (TO_DATE('30/04/1984', 'DD/MM/YYYY')),
27 PARTITION MJJA1984 VALUES LESS THAN (TO_DATE('30/08/1984', 'DD/MM/YYYY')),
28 PARTITION SOND1984 VALUES LESS THAN (TO_DATE('31/12/1984', 'DD/MM/YYYY'))
29 );
Table created.
SQL>
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT','TEST');
PL/SQL procedure successfully completed.
SQL>
SQL> BEGIN DBMS_REDEFINITION.start_redef_table
2 (
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> insert into scott.test select * from scott.emp;
14 rows created.
SQL> commit;
Commit complete.
SQL>
SQL> select * from scott.test;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
1 SMITH CLERK 7902 17-DEC-80 800 20
2 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
3 WARD SALESMAN 7698 22-FEB-81 1250 500 30
4 JONES MANAGER 7839 02-APR-81 2975 20
5 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
6 BLAKE MANAGER 7839 01-MAY-81 2850 30
7 CLARK MANAGER 7839 09-JUN-81 2450 10
8 SCOTT ANALYST 7566 09-DEC-82 3000 20
9 KING PRESIDENT 17-NOV-81 5000 10
10 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
11 ADAMS CLERK 7788 12-JAN-83 1100 20
12 JAMES CLERK 7698 03-DEC-81 950 30
13 FORD ANALYST 7566 03-DEC-81 3000 20
14 MILLER CLERK 7782 23-JAN-82 1300 10
28 rows selected.
SQL>
SQL>
SQL> BEGIN
2 DBMS_REDEFINITION.sync_interim_table(
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT COUNT(*) FROM scott.test;
COUNT(*)
----------
28
SQL>
SQL> SELECT COUNT(*) FROM scott.par_Test;
COUNT(*)
----------
28
SQL>
SQL>
SQL> exec dbms_stats.gather_table_stats('SCOTT','PAR_TEST');
PL/SQL procedure successfully completed.
SQL>
SQL> variable x number
SQL>
SQL> begin
2 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test',
6 copy_indexes=>0,
7 copy_constraints=>false,
8 num_errors=>:x
9 );
10 end;
11 /
PL/SQL procedure successfully completed.
SQL> print x
X
----------
0
SQL>
SQL>
SQL> BEGIN
2 dbms_redefinition.finish_redef_table(
3 uname => 'scott',
4 orig_table => 'test',
5 int_table => 'par_test');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> SELECT COUNT(*) FROM SCOTT.TEST;
COUNT(*)
----------
28
SQL> SELECT COUNT(*) FROM SCOTT.PAR_TEST;
COUNT(*)
----------
28
SQL>
SQL> SELECT partition_name, num_rows FROM all_tab_partitions WHERE table_name = 'TEST' and table_owner = 'SCOTT';
PARTITION_NAME NUM_ROWS
------------------------------ ----------
JFMA1980 0
JFMA1981 6
JFMA1982 2
JFMA1983 2
JFMA1984 0
MJJA1980 0
MJJA1981 4
MJJA1982 0
MJJA1983 0
MJJA1984 0
SOND1980 2
SOND1981 10
SOND1982 2
SOND1983 0
SOND1984 0
15 rows selected.
SQL>
SQL> select owner, table_name from dba_triggers
2 where trigger_name = 'TEST_TRG';
OWNER TABLE_NAME
------------------------------ ------------------------------
SCOTT TEST
SQL>
SQL> drop TABLE scott.par_test purge;
Table dropped.
SQL>
SQL>
See where the trigger is now ?
Hope this helps.