Сообщение об уникальном ограничении Oracle - PullRequest
0 голосов
/ 10 июня 2011

Я поддерживаю устаревшее приложение, и недавно мне сообщили, что люди получают сообщение об ошибке при попытке заполнить одну из наших таблиц оракула. Теперь эти таблицы оракулов нам не нужны, но я все же хочу попробовать что-нибудь, чтобы помочь найти проблему.

В любом случае сообщение об ошибке следующее:

java.sql.SQLException: ORA-00001: уникальное ограничение (REO0. PK_TableName ) нарушено:

Я знаю, что могу найти много информации в Интернете через Google и здесь об этом сообщении об ошибке. Это не то, о чем мой вопрос.

Вопрос : имя таблицы, показанное здесь (я выделил жирным шрифтом), заключается в том, что Название таблицы или является PK_ часть, добавленная для представления «первичного ключа»?

Причина, по которой я спрашиваю: я не могу напрямую получить доступ к этой базе данных, но каким-то образом я вижу все таблицы в REO0 и могу найти одну с TableName , но не одну с * PK_TableName * в качестве название для таблицы. Так что, если этот PK_ будет ссылаться на что-то вроде «первичного ключа» (ограничение которого нарушено), то это будет иметь немного больше смысла.

1 Ответ

6 голосов
/ 10 июня 2011

PK_tablename - это имя ограничения, и, как Алекс Пул утверждает в хорошем комментарии, оно было указано в DDL (CREATE TABLE ... (columns, CONSTRAINT PK_tablename PRIMARY KEY(columns...) ), или ALTER TABLE ... ADD CONSTRAINT PK_tablename PRIMARY KEY(columns...) или CREATE UNIQUE INDEX PK_tablename ON ... (columns) дляпример).Если имя не указано, Oracle генерирует имя, которое начинается с SYS.

. Обратите внимание, что обычно PK_x предлагает первичный ключ для таблицы x, но ваше ограничение также может быть ограничением внешнего ключа илинапример, не пустое ограничение.

Следующий запрос сообщит вам все:

SELECT * FROM all_constraints WHERE constraint_name = 'PK_TABLENAME'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...