Как предотвратить повторяющиеся строки в запросе вставки с помощью Oracle? - PullRequest
1 голос
/ 31 октября 2009

У меня есть таблица A в Oracle , у которой есть первичный ключ (id). Мне нужно вставить данные в эту таблицу.

Как предотвратить повторяющиеся строки?

Ответы [ 3 ]

5 голосов
/ 31 октября 2009

Если столбец идентификатора помечен как PK , вы не сможете вставить дубликат ключа, сервер выдаст исключение.

Если вы вставите дубликаты данных с другим ключом - это логика, с которой вам нужно иметь дело (например, наложение уникальных ограничений на фактические данные) или проверка перед вставкой.

1 голос
/ 31 октября 2009

Если вы имеете в виду, что у вас есть строки, которые идентичны (кроме первичного ключа), и вы хотите знать, как их удалить, тогда выполните:

select col2, col3, ...coln, min(id) from A
group by col2, col3, ...coln

(т.е. выбрать во всех столбцах, кроме идентификатора)

Чтобы получить уникальные экземпляры, сделайте

delete from A where id not in
(select min(id) from A
group by col2, col3, ...coln) as x

для удаления всех строк, кроме уникальных экземпляров (т.е. дубликатов).

0 голосов
/ 31 октября 2009

Сначала вы должны создать уникальный идентификатор для этой таблицы, который имеет последовательность. Затем, когда вы вставляете в эту таблицу, в операторе вставки вы можете использовать:

 tableName_sn.nextval

в выражении типа:

inserti into tableName (id) values (tableName_sn.nextval)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...