2013-05-24 4 views
0

Текущее применение JPA для автоматического генерации идентификатора таблицы/объекта. Теперь требование хочет получить запрос вручную вставить данные в базу данных с помощью SQL запросовЕсть ли способ генерировать идентификатор без последовательности?

Так вопросы:

  1. Стоит ли создать последовательность в этой схеме только для этого мало требования?
  2. Если ответ на вопрос 1 нет, тогда какой может быть план b?
+1

Ваше требование немного расплывчато. * Запрос на ввод вручную * не означает многого (для меня каким-либо образом). Однако, если вы хотите сгенерировать последовательность целых чисел на основе данных, вы можете использовать ROW_NUMBER() –

+0

@Conrad Frix, это как вставка в значения таблицы (id ....) (someIncrementValue ...), поэтому мы можем использовать ROW_NUMBER для что 'someIncrementValue'? Спасибо – Dreamer

ответ

3
  1. Да. Последовательность тривиальна - почему бы вам не не так ли?

  2. N/A

+0

Что делать, если в таблице есть существующие данные, которые не генерируются какой-либо последовательностью? – Dreamer

+1

Извините, возможно, я не понимаю, что вы делаете, но если вам нужно сгенерировать уникальный номер, то последовательность - это способ сделать это, независимо от того, каким образом были связаны данные, с которыми вы хотите связать их. – LoztInSpace

+2

@Dreamer CREATE SEQUENCE имеет предложение START WITH. Если таблица уже содержит существующие данные в столбце ID, и эти значения являются числовыми, тогда вы можете указать начальное значение для вновь созданной последовательности, которая будет самым большим существующим значением + 1. –

3

несколькими способами:

  1. Use a UUID. UUID - это псевдослучайные, большие буквенно-цифровые строки, которые гарантированно будут уникальными после создания.
  2. Имеет ли данные что-то уникальное? Как временная метка, или IP-адрес и т. Д.? Если да, то используйте что
  3. Сочетания текущего времени + несколько менее уникального значения в данных
  4. Сочетания текущего времени + некоторых целом i, что вы держите приращение

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

Edit: Незначительные пояснения

0

Вы просто делаете один загрузку данных в пустую таблицу, и нет других пользователей, одновременно вставляя данные? Если это так, вы можете просто использовать ROWNUM для генерации идентификаторов, начиная с 1, например.

INSERT INTO mytable 
SELECT ROWNUM AS ID 
     ,etc AS etc 
FROM ... 
Смежные вопросы