Я заполнил свою целевую таблицу с помощью приложения ETL в соответствии с нашими бизнес-требованиями. Эта целевая таблица имеет 5 «уровней», и для каждого из этих уровней я должен вставить соответствующие «дочерние» данные. Вот мой сценарий для выбора «дочерних» данных для вставки (имейте в виду, что есть и другие столбцы, но приведенный ниже сценарий просто показывает, как я перебираю таблицу, чтобы определить 5 уровней:
select
code_test_data + 200 as CODE_test_data_child,
test_data from targetTable
where level_test_data in (select level from dual t connect by level <=5)
order by level_test_data
цель состоит в том, чтобы выполнить сценарий sql для вставки дочерних данных после того, как мое приложение etl вставит первичные данные.
Мой вопрос:
Как будет управляться столбец id целевой таблицы для «дочерних» вставок? столбец идентификатора для основной вставки управляется моим приложением etl. Я думаю о нескольких подходах:
1) создайте функцию, которая вернет max(id)+1. Итак, для каждой вставки я могу вызвать эту функцию, чтобы добавить идентификатор
2) Последовательность: используйте функцию последовательности Oracle, чтобы добавить максимальный идентификатор. Но мне пришлось бы «жестко» закодировать начальное значение последовательности. Начальное значение будет получено из max(id) целевой таблицы. Я действительно не хочу жестко кодировать начальное значение
3) Я попытался использовать max(id)+1 в своей вставке в (col1,col2..) select max(id)+1.. но это просто увеличило идентификатор каждой строки на 1.
Кто-нибудь может поделиться лучшими решениями, пожалуйста?
огромное спасибо
РЕДАКТИРОВАТЬ:
После вставки первичных данных я вставлю дочерние данные, но идентификаторы дочерних вставок должны быть max(id)+1
: Пример: row1=1, primaryTest1, level1
... row2= 2, primaryTest2, Level2
...newinserts=3, childTest1 | 4, childTest1 | 5, childTest2 | 6, childTest2 ...
Я надеюсь, что этот пример прояснит мой вопрос.