ビジネス要件に応じて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 ...
この例が私の質問を明確にすることを願っています。
ありがとうございましたか! –
[OracleでAUTO \ _INCREMENTでIDを作成する方法は?](https://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle) –
Iあなたが何を求めているのか分からない。私の最善の解釈は、1つのテーブルにデータ(1つの主挿入、5つの子挿入)を挿入することです。プライマリのPKは、ETLアプリケーションによって事前に決定されます。シーケンス値が衝突することなく、PK値を子挿入に割り当てたいとします。そうですか?もし私があなたが複合PKを使用することをお勧めします2つの列レベル(プライマリインサートの場合は0、それ以外の場合は1-5)とキー(プライマリのETL値と子挿入のシーケンスを使用)。「キー」列に衝突があるかどうかは関係ありません –