Ключи предварительной выборки JDBC для Oracle 11g - PullRequest
1 голос
/ 11 октября 2011

Мое приложение должно знать, какая строка получает какой ключ в базе данных.

Я использую JDBC на уровне изоляции для фиксации чтения с пакетными обновлениями. Поэтому получение ключей с помощью getGeneratedKeys невозможно. Мой план состоит в том, чтобы получить диапазон идентификаторов из базы данных безопасным способом транзакции, например, две параллельные транзакции не могут получить одинаковые ключи.

Могу ли я написать несколько SQL-запросов с числом будущих строк в качестве аргумента для получения списка будущих ключей в Oracle 11g?

Какие у меня есть варианты?

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Вы можете использовать последовательности для этой цели:

create sequence s;

, чтобы получить идентификатор

select s.nextval from dual;

или получить диапазон идентификаторов:

select s.nextval from dual connect by level <= 10;
2 голосов
/ 12 октября 2011

Просто хотел добавить:

Нет явной связи между последовательностями и таблицами.Последовательность - это просто механизм генерации числовых последовательностей.Вы можете предположить, что последовательность никогда не выдаст дублирующее значение, и это все.Не принимайте порядок, и определенно не ожидает последовательности без пробелов.Последовательности сделаны таким образом в Oracle, по замыслу.Следуя этим правилам и не делая никаких других предположений о поведении последовательности, мы получаем чрезвычайно масштабируемую производительность с последовательностями.Обратите внимание, что как только вы пытаетесь навязать порядок или последовательность без пропусков, ваша производительность сильно страдает.

В итоге: 1.) Последовательности очень простые и очень быстрые.2.) Не считайте, что вы не можете предсказать поведение последовательности, кроме «без ошибок».3.) Последовательности являются независимыми объектами, не привязанными к таблице, и могут использоваться для создания значений последовательности, которые будут использоваться в одной и той же таблице или во многих разных таблицах.

Надеюсь, что это поможет.

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