我根据业务需求使用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
目标是让我的etl应用程序插入主数据后执行sql脚本以插入子数据。
我的问题是:
如何为&#34; child&#34;管理目标表的id列?插入?主插入的id列由我的etl应用程序管理。 我正在考虑几种方法:
1)创建一个返回max(id)+1的函数。因此,对于每个插入,我可以调用此函数来添加id
2)序列:使用Oracle的序列功能添加最大ID。但我必须努力做到#34;编码序列的起始值。起始值将来自目标表的最大值(id)。我真的不想硬编码起始值
3)我尝试在我的插入中使用max(id)+1(col1,col2 ..)选择max(id)+1 ..但这只是将每行的id增加1。
有人会有更好的解决方案可以分享吗?
谢谢堆
编辑:
插入主数据后,我将插入子数据,但子插入的ID必须为max(id)+1
:示例:row1=1, primaryTest1, level1
... row2= 2, primaryTest2, Level2
... newinserts = {{ 1}}我希望这个例子澄清了我的问题。
答案 0 :(得分:0)
我找到了解决问题的方法。这post帮了我
这是我的解决方案(如果它可以帮助其他人):
1)使用targetTable的max(id)中的Start值创建我的序列。 poste link
2)创建一个调用此序列的过程来插入我的id,包括我的select语句中的子值:
select
seq_name.nextval,
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
谢谢