2017-10-18 69 views
0

我使用ETL應用按照我們的業務需求填充我的目標表。 這個目標表有5個「等級」,對於這些等級中的每個等級,我必須插入他們相應的「子」數據。這裏是我的腳本,以選擇「子」數據的插入(請注意有其他列,但下面的腳本只是爲了顯示我在表中如何迭代識別5個leves:自動遞增表的ID與新的「孩子」插入

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列的「孩子」刀片管理?主插入的id列由my etl應用程序管理。 我正在考慮幾種方法:

1)創建一個將返回MAX(ID)+1功能。因此,對於每個插入,我可以調用這個函數添加的ID

2)順序:使用Oracle的序列功能添加最大ID。但是我必須「硬」編碼序列的起始值。起始值將來自目標表的最大值(id)。我真的不想硬編碼的起始值

3)我嘗試使用max(id)+1在我插入到(col1,col2 ..)select max(id)+1 ..但那只是1。

指針累加每一行的id

會有人有一些更好的解決方案,分享嗎?

感謝堆

編輯:

後插入的主數據,我將插入子數據但子插件的ID必須max(id)+1:實施例:row1=1, primaryTest1, level1 ... row2= 2, primaryTest2, Level2 ... newinserts = 3, childTest1 | 4, childTest1 | 5, childTest2 | 6, childTest2 ...我希望這個例子能夠澄清我的問題。

+0

哪個Oracle版本? –

+0

【如何創建與甲骨文AUTO \ _INCREMENT ID?(https://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle) –

+0

我的可能的複製我不確定你在問什麼。我最好的解釋是 - 你想插入數據(1個主插入,5個子插入)到一個表中。小學的PK由ETL申請預先確定。您想要將PK值分配給子插入而不會衝突序列值。是對的嗎?如果是這樣的話,我建議你使用一個使用兩列的複合PK - 級別(0表示主插入,否則爲1-5),然後是一個鍵(對於主插入使用ETL值,對於子插入使用ETL值)。那麼在'key'列中是否有衝突並不重要 –

回答

0

我找到了解決我的問題。這post幫我

這裏是我的解決方案(如果它可以幫助別人):

1)用我的targetTable從MAX(ID開始值)創建我的序列。 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 

謝謝