我使用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 ...
我希望這個例子能夠澄清我的問題。
哪個Oracle版本? –
【如何創建與甲骨文AUTO \ _INCREMENT ID?(https://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle) –
我的可能的複製我不確定你在問什麼。我最好的解釋是 - 你想插入數據(1個主插入,5個子插入)到一個表中。小學的PK由ETL申請預先確定。您想要將PK值分配給子插入而不會衝突序列值。是對的嗎?如果是這樣的話,我建議你使用一個使用兩列的複合PK - 級別(0表示主插入,否則爲1-5),然後是一個鍵(對於主插入使用ETL值,對於子插入使用ETL值)。那麼在'key'列中是否有衝突並不重要 –