Here is a quick post on a scenario where Oracle attempts to validate a Primary Key (index present) when creating a Materialized View and apparently reports a different name for the constraint !. The Primary Key and Indexis called "TARGET_TABLE" but the ORA-2437 error reports the error as being against "TARGET_TABLE1" -- with a "1" seemingly appended.
SQL> drop table target_table purge;
Table dropped.
SQL> create table target_table (column_1 number not null, column_2 varchar2(30), column_3 varchar2(300));
Table created.
SQL>
SQL> insert into target_table
2 select rownum, dbms_random.string('X',8),dbms_random.string('U',30)
3 from dual connect by level < 101;
100 rows created.
SQL> commit;
Commit complete.
SQL> select count(*) from target_table;
COUNT(*)
----------
100
SQL>
SQL> create index target_table on target_table(column_1);
Index created.
SQL> insert into target_table values (5,'ABC','XYZXZYZ');
1 row created.
SQL>
SQL> alter table target_table add constraint target_table primary key (column_1) enable novalidate ;
Table altered.
SQL>
SQL> select index_name from user_indexes where table_name = 'TARGET_TABLE';
INDEX_NAME
------------------------------
TARGET_TABLE
SQL>
SQL> select constraint_name, index_name
2 from user_constraints
3 where table_name = 'TARGET_TABLE'
4 and constraint_type in ('U','P');
CONSTRAINT_NAME INDEX_NAME
------------------------------ ------------------------------
TARGET_TABLE TARGET_TABLE
SQL>
SQL> create materialized view log on target_table;
Materialized view log created.
SQL>
SQL> create materialized view tt_mv
2 refresh fast on demand
3 as select column_1, column_2
4 from target_table
5 /
from target_table
*
ERROR at line 4:
ORA-02437: cannot validate (HEMANT.TARGET_TABLE1) - primary key violated
SQL>
SQL>
SQL> select count(*) from target_table where column_1 = 5;
COUNT(*)
----------
2
SQL>
.
.
.
No comments:
Post a Comment