2012-04-26 5 views
3

Oracleでは、2つのオプション表から表の列を更新できますか?つまり、列が全く同じ2つのテーブルがあり、入力IDに応じて、関連するテーブルを更新したいと考えています。 たとえば、2つの表から更新する場合の文の使用方法

UPDATE CASE WHEN EXISTS (
    SELECT A.ID FROM Table_A A 
    WHERE A.ID = 'B1' 
    ) 
    THEN 
     Table_A A 
     SET A.Status = '0' 
     WHERE A.ID = 'B1' 
    ELSE 
     Table_B B 
     SET B.Status = '0' 
     WHERE B.ID = 'B1' 

ここで、Table_AとTable_Bは、異なるレコードで全く同じ列を持ちます。

ありがとうございます。

答えて

0

UPDATE Table_A A SETのステータス= BEGIN '0' WHERE A.ID =#番号#。 sql%notfound then
UPDATEテーブルB B SET STATUS = '0' WHERE B.ID =#ID#; END IF; END;

1

私はそれが単一なステートメントでは可能だとは思わないが、あなたはPL/SQLを使用してそれを達成することができます:

declare 
VarCount number; 

begin 

SELECT COUNT(*) 
INTO VarCount 
FROM Table_A 
WHERE ID = 'B1'; 

IF VarCount > 1 THEN 
    UPDATE Table_A 
    SET  Status = '0' 
    WHERE ID = 'B1'; 
ELSE 
    UPDATE Table_B 
    SET  Status = '0' 
    WHERE ID = 'B1'; 
END IF; 

終了。

+0

Weenoid、ありがとう、私はT-SQLでは可能ですが、PL/SQLではないと思います。 私は試してみるとORA-00900を投げます。 – enginbilici

+0

申し訳ありませんが、私はオラクルに精通していない私の更新された例を参照してください(私は自分自身をテストすることはできません私は恐れている) – weenoid

+0

もう一度お友達に感謝、再びそれは動作しませんでした。私は長い間T-SQLを使用してきましたが、SQL Developerで動作することはわかっています。しかし、私はOracleでそれを実行することはできません... – enginbilici

0

なぜこの機能が必要なのか、本当に不思議です。私が考えることができるのは、あなたはたくさんのデータを持っていて、1つの "アーカイブ"テーブルと1つの "アクティブ"テーブルを使って分割することにしました。

この場合、両方のテーブルを常に更新するだけで済みます。 idが存在しない場合、何も更新されません。最初にテーブルaからidを選択し、次にaまたはbを更新するのと同じくらい速いかもしれません。 パフォーマンス向上のためにpl/sqlブロックを使用することもできます。 (必要な場合にそれが唯一の第二の文を実行する)

create or replace procedure update_table(p_id in table_a.id%type) 
as 
begin 
    update table_a 
    set status = 0 
    where id = p_id; 

    -- only update table_b if table_a didn't update anything 
    if sql%rowcount == 0 then 
     update table_b 
     set status = 0 
     where id = p_id; 
    end if; 
end; 
+0

はい、私は大量のデータを持つメインとログテーブルを持っています。だから私はこれが必要です。 – enginbilici

関連する問題