Нужно сгенерировать порядковый номер моего выбора в oracle - PullRequest
1 голос
/ 21 февраля 2020

У меня есть требование.

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

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

Например: таблица A может содержать числа от 1 до 100000; таблица B может содержать числа от 200000 до 300000; таблица C должна содержать числа от 300000 до 400000

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

Есть ли способ, которым это можно легко сделать с помощью функции row_number?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Есть ли способ, которым это можно легко сделать с помощью функции row_number?

Не совсем, если вы хотите, чтобы эти последовательности заполнялись как данные INSERT в эти таблицы.

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

Если вам нужны уникальные идентификаторы для нескольких таблиц, у вас есть несколько вариантов (от простого к менее простому).

  1. Используйте одну последовательность Oracle для всех таблиц. Числа, используемые каждой таблицей, не будут хорошими диапазонами (например, 1-100000 для таблицы № 1 и т. Д. c). Однако одно и то же число никогда не будет использоваться более чем в одной таблице, что гарантирует, что вы сможете объединить их позже без проблем.

  2. Определите несколько последовательностей Oracle, одну для каждый стол. Определите каждую последовательность с помощью START WITH, MINVALUE и MAXVALUE, чтобы определить ее диапазон.

  3. Используйте одну последовательность Oracle с MAXVALUE. Например, если максимальное значение составляет 999999, вставьте в таблицу № 1 значение my_sequence.nextval, таблицу № 2 - значение 1000000+my_sequence.nextval и таблицу № 3 - значение 2000000+my_sequence.nextval.

. # 2 можно использовать, если вы хотите использовать столбцы идентификаторов вместо последовательностей.

1 голос
/ 21 февраля 2020

Вы можете напрямую использовать функцию row_number () для генерации чисел из 1:

row_number() Over(Order by field_name)

Если вы хотите указать, откуда начать отсчет, вы можете добавить его к номерам строк. Например, если вы хотите начать с 1001:

1000 + row_number() Over(Order by field_name)

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

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