2017-10-17 3 views
1

次のクエリを使用しています(つまり、base_priceという1つの列で正常に動作しています)が、複数の列を更新しようとしているときにORA-01767:UPDATE .. SET式はサブクエリでなければなりません。複数の列を 'with'句で更新できません

UPDATE quote_item qi 
SET (qi.base_price,qi.base_cost) 
    = 
    (WITH baseVersion AS 
    (SELECT qi1.quote_oid, qi1.item_num, qi1.sub_item_num as sub_item_num, q1.quote_num, qi1.base_price, qi1.base_cost 
    FROM quote q1, 
    quote_item qi1 
    WHERE q1.oid   = qi1.quote_oid 
    AND q1.quote_type_oid=4 
    AND q1.version_num = 0 
) 
SELECT bv.base_price,bv.base_cost 
FROM baseVersion bv, 
    quote revQuote 
WHERE revQuote.oid  = qi.quote_oid 
AND revQuote.quote_num = bv.quote_num 
AND qi.item_num   =bv.item_num 
AND qi.sub_item_num  =bv.sub_item_num 
AND revQuote.version_num >0 and revQuote.quote_type_oid=4 
) 
    where qi.quote_type_oid=4; 

はいくつかの周りを見た後、私はそれが句でから再び選択することによって行うことができる解決策を見つけたが、私は私のクエリreferenceでそれを実装することはできませんよ。

誰でもこの方法を知っていますか?

答えて

1

同じサブクエリから複数の列を更新することはできません。サブクエリを他の列に再利用するか(クエリを2回実行する際にはこれをお勧めしません)、oracleのMERGEを使用できます。次のようになります(調整する):

MERGE INTO quote_item qi 
USING (Your subquery goes here) t 
ON(t.oid  = qi.quote_oid 
    AND qi.item_num   =t.item_num 
    AND qi.sub_item_num  =t.sub_item_num) 
WHEN MATCHED THEN UPDATE 
    SET qi.col1 = .., 
     qi.col2 = .. 
関連する問題