使用new" child"自动增加表的id。插页

时间:2017-10-18 04:50:51

标签: oracle plsql

我根据业务需求使用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}}我希望这个例子澄清了我的问题。

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

谢谢