2017-10-18 12 views
0

ビジネス要件に応じてETLアプリケーションを使用してターゲットテーブルを作成しました。 このターゲットテーブルには5つの「レベル」があり、これらのレベルごとに対応する「子」データを挿入する必要があります。ここで(心を挿入するには、「子」のデータを選択するための私のスクリプトがありますが、他の列がありますが、以下のスクリプトは、ちょうど私が5つのリーヴを識別するために、テーブルを反復処理方法を示すことです。新しい "子"インサートを持つテーブルの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 

狙い。私のETLアプリケーションは、プライマリ・データを挿入した後、SQLスクリプトは、子データを挿入するために実行することです

私の質問は:

ターゲットテーブルのidカラムには、「子」の挿入のために管理する方法?プライマリインサートのidカラムは、私のetlアプリケーションによって管理されています 私はいくつかのアプローチを考えています:

1)max(id)+1を返す関数を作成します。したがって、各インサートに対して、この関数を呼び出してIDを追加することができます。

2)シーケンス:Oracleのシーケンス機能を使用して最大IDを追加します。しかし、私はシーケンスの開始値を "ハード"コード化する必要があります。開始値は、ターゲットテーブルのmax(id)から取得されます。私は本当に開始値をハードコードしたくない

3)私は(col1、col2 ..)に私の挿入でmax(id)+1を使ってみました。各行のIDを1ずつインクリメントしました。

誰かがもっと良い解決策を教えてください。

おかげヒープ

EDIT:

した後、私は子供のデータを挿入するプライマリデータを挿入しますが、子インサートのIDがなければなりませんmax(id)+1:例:row1=1, primaryTest1, level1 ... row2= 2, primaryTest2, Level2 ... newinserts = 3, childTest1 | 4, childTest1 | 5, childTest2 | 6, childTest2 ...この例が私の質問を明確にすることを願っています。

+0

ありがとうございましたか! –

+0

[OracleでAUTO \ _INCREMENTでIDを作成する方法は?](https://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle) –

+0

Iあなたが何を求めているのか分からない。私の最善の解釈は、1つのテーブルにデータ(1つの主挿入、5つの子挿入)を挿入することです。プライマリのPKは、ETLアプリケーションによって事前に決定されます。シーケンス値が衝突することなく、PK値を子挿入に割り当てたいとします。そうですか?もし私があなたが複合PKを使用することをお勧めします2つの列レベル(プライマリインサートの場合は0、それ以外の場合は1-5)とキー(プライマリのETL値と子挿入のシーケンスを使用)。「キー」列に衝突があるかどうかは関係ありません –

答えて

0

私の質問に対する解決策が見つかりました。私のターゲット表の最大値(ID)からのスタート値を使用して、私のシーケンスを作成します)

1:このpostはここ

は(それが他の誰かを助けることができるならば)私の解決策である私を助けました。 poste link

2)は私のselect文で子の値を含め、私のIDを挿入するには、このシーケンスを呼び出すプロシージャを作成します。

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 

をあなたにどのOracleバージョン

関連する問題