Предполагая, что ваш первичный ключ действительно определен в этом столбце и включен, вы можете проверить, проверен ли он. Только проверенные ограничения гарантируются Oracle как истинные для всех строк.
Вот сценарий с непроверенным первичным ключом с повторяющимся значением:
SQL> DROP TABLE t;
Table dropped
SQL> CREATE TABLE t (ID NUMBER);
Table created
SQL> INSERT INTO t VALUES (1);
1 row inserted
SQL> INSERT INTO t VALUES (1);
1 row inserted
SQL> CREATE INDEX t_id_idx ON t(ID);
Index created
SQL> ALTER TABLE t ADD CONSTRAINT pk_id PRIMARY KEY (ID) NOVALIDATE;
Table altered
SQL> SELECT * FROM t;
ID
----------
1
1
SQL> SELECT constraint_type, status, validated
2 FROM user_constraints
3 WHERE constraint_name = 'PK_ID';
CONSTRAINT_TYPE STATUS VALIDATED
--------------- -------- -------------
P ENABLED NOT VALIDATED
Обновление:
Одно вероятное объяснение заключается в том, что прямая загрузка пути (из SQL * Loader) оставила ваш уникальный индекс в непригодном для использования состоянии с дублированными первичными ключами.