2010-11-18 15 views
1

PLSQLのクエリでWITHとUPDATEを使用する方法のサンプルはありますか?PLSQLでUPDATEとWITHを使用する方法

私はうなずき、グーグルグーグルで成功しません。ここで

は、基本的にこれはタイプIIの寸法のアップデートで私は

WITH 
OldRecords AS 
(
    SELECT 'New Records' as RecordLabel, rowid, OrDev.* 
    FROM CDR.MSRS_OR_ORDEV OrDev 
    WHERE 1=1 
    AND OrDev.ASOFENDDATETIME IS NULL 
    AND OrDev.REPORTSTARTDATE = to_date ('7/1/2010', 'mm/dd/yyyy') 
    AND OrDev.REPORTENDDATE = to_date ('7/31/2010', 'mm/dd/yyyy') 
    AND OrDev.downloadrequestid <> 3 
), 
NewRecords AS 
(
    SELECT 'Old Records' as RecordLabelrowid, OrDev.* 
    FROM CDR.MSRS_OR_ORDEV OrDev 
    WHERE 1=1 
    AND OrDev.ASOFENDDATETIME IS NULL 
    AND OrDev.REPORTSTARTDATE = to_date ('7/1/2010', 'mm/dd/yyyy') 
    AND OrDev.REPORTENDDATE = to_date ('7/31/2010', 'mm/dd/yyyy') 
    AND OrDev.downloadrequestid = 3 
) 
UPDATE CDR.MSRS_OR_ORDEV SET ASOFENDDATETIME = GETDATE() 
WHERE RowID IN 
(
    SELECT OldRecords.RowId 
    FROM OldRecords 
    INNER JOIN NewRecords 
     ON OldRecords.Customer_Id = NewRecords.Customer_Id 
     AND OldRecords.BusinesKey1 = NewRecords.BusinesKey1 
     AND OldRecords.BusinesKey2 = NewRecords.BusinesKey2 
) 

をやろうとしていますものです。

+0

@FrustratedWithFormsDesigner質問を編集コードを追加する –

答えて

3

これは、PLSQLのUPDATEにWITHを使用する方法です。これは、単一の列の更新でのみ機能することに注意してください。

UPDATE CDR.MSRS_OR_ORDEV 
SET ASOFENDDATETIME = sysdate 
WHERE RowID IN 
(
    WITH 
    OldRecords AS 
    (
    SELECT rowid, OldRecords.* 
    FROM CDR.MSRS_OR_ORDEV OldRecords 
    WHERE 1=1 
     AND OldRecords.ASOFENDDATETIME IS NULL 
     AND OldRecords.REPORTSTARTDATE = to_date ('7/1/2010', 'mm/dd/yyyy') 
     AND OldRecords.REPORTENDDATE = to_date ('7/31/2010', 'mm/dd/yyyy') 
     AND OldRecords.downloadrequestid <> 3 
), 
    NewRecords AS 
    (
    SELECT rowid, NewRecords.* 
    FROM CDR.MSRS_OR_ORDEV NewRecords 
    WHERE 1=1 
     AND NewRecords.ASOFENDDATETIME IS NULL 
     AND NewRecords.REPORTSTARTDATE = to_date ('7/1/2010', 'mm/dd/yyyy') 
     AND NewRecords.REPORTENDDATE = to_date ('7/31/2010', 'mm/dd/yyyy') 
     AND NewRecords.downloadrequestid = 3 
) 
    SELECT OldRecords.RowId 
    FROM OldRecords 
    INNER JOIN NewRecords 
     ON OldRecords.BusinesKey1 = NewRecords.BusinesKey1 
     AND OldRecords.BusinesKey2 = NewRecords.BusinesKey2 
); 
0

updateselectの構文図を見ると、サブクエリのファクタリングを更新で使用できるかどうかわかりません。完全に戻ってそれらのクエリをUPDATE文のサブクエリ部分に置き換えるか、またはそれらのビューを作成できます。私はその意見について行くだろう。

関連する問題