2017-07-15 57 views
-2

を選択し、[更新:オラクル:私は3つのテーブル持っていると同時に、

Table-1: Column1 | Column2 | Column 3 
Table-2: Column4 | Column5 | ColumnUpdate 
Table-3: Column7 | Column8 

を私は表-1といくつかの条件に基づいて、表3に表2から一部の行をコピーする必要があります。

マイ挿入ステートメントは次のようになります。

INSERT INTO Table-3 (
    Column7, 
    Column8) 
SELECT Table-2.COLUMN4, Table-2.COLUMN5 
FROM Table-2 INNER JOIN Table-1 
ON Table-2.COLUMN4 = TABLE-1.Column1; 

は、しかし、私は、列を更新する:ColumnUpdate 1 『」選択行の(表2)に』

したがって、いくつかの行を選択し、直ちにその行のプロセス列を '1'として更新したいとします。

私はそれを行う方法がわかりません。私は "OUTPUT"句や "UPDATE FOR"を使っていくつかの例を見ましたが、私のステートメントでそれらを使用する方法は正確には分かりません。

+0

ジャスト(見つけるのは非常に簡単である) 'UPDATE'ステートメントのドキュメントを引き上げます。 –

+0

あなたのための速い返信のためのThx、私は質問を投稿する前にいくつかの研究をしました。私はこれを達成するために私のステートメントにUpdateステートメントを組み込む方法を知らない。基本的には、コピーした選択行を更新したいので、「コピー済み」とマークされます – NoName123

+0

これはあなたを助けるかもしれません:[https://stackoverflow.com/questions/237327/oracle-how-to-upsert-update - または - テーブルへの挿入](https://stackoverflow.com/questions/237327/oracle-how-to-upsert-update-or-insert-into-a- table) –

答えて

1
MERGE 
    INTO target_table t1 
    USING (SELECT col1, col2 
       FROM source_table 
       WHERE //conditions here) s1 
    ON (t1.id = s1.id) 
    WHEN MATCHED THEN 
    UPDATE SET column_update = '1' 
    WHEN NOT MATCHED THEN 
    INSERT (col1, col2) 
    VALUES (s1.col1, s1.col2) 
    WHERE (// condition here); 

UPDATE

BEGIN 
    FOR temp_var IN (
    SELECT * from table_a 
    WHERE table_a.col1 = table_b.col1) 
    LOOP 
     // INSERTING INTO TARGET TABLE 
     INSERT INTO table_b 
     VALUES(temp_var.col1, temp_var.col2); 
     // UPDATING SOURCE TABLE 
     UPDATE table_a 
     SET status = 'COPIED' 
     WHERE col1 = temp_var.col1; 
    END LOOP; 
END; 
+0

Thx、しかし私は必要別のロジックを実装するか、多分私は間違っています。 ソース表の選択された行をコピーして「コピーされた」とマークされるので、ソース表の列を更新する必要があります。 したがって、ターゲット表に新しい行を挿入するとソーステーブルのこの行を「コピー済み」としてマークします。 この句では、新しい欄がターゲットテーブルに挿入されるため、「WHERE NOT MATCHED THEN」の後にこの列を更新する必要があります – NoName123

+0

コピーの条件は何ですか? – fg78nc

+0

遅く返信してください(私のコンピュータに問題があります... bluescreen)。 私はほぼ同じデータを持つ2つのテーブルを持っています(AとBとしましょう)。これらのテーブルの違いは、そのうちの1つに多くの情報(列が増えています)が含まれていることです。このテーブル(AまたはB)のデータを(A.id = b.id)という条件に基づいて3番目のテーブル(C)にコピーする必要があります。私は行をコピーするとき。私はソーステーブルにコピーされた行をマークする必要があります(列 "update_column"を1に設定することによって) – NoName123

関連する問題