Wie UPDATE und MIT in PLSQL verwenden
-
26-09-2019 - |
Frage
Hat jemand eine Probe davon, wie MIT und UPDATE in einer Abfrage in PLSQL benutzen?
I binged und gegoogelt ohne Erfolg.
Hier ist, was ich zu tun versuchen,
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
)
Im Grunde ist dies eine Typ-II-Dimension zu aktualisieren.
Lösung
Dies ist, wie man mit in PLSQL in einer UPDATE zu verwenden. Beachten Sie, dass dies nur für eine einzelne Spalte Update funktioniert.
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
);
Andere Tipps
Mit Blick auf die Syntaxdiagramme für update und wählen , ich bin nicht sicher, kann die Unterabfrage Factoring mit der Aktualisierung verwendet werden. Sie könnten entweder diese Abfragen vollständig zurück in die Unterabfrage Teil Ihrer UPDATE-Anweisung ersetzen, oder Sie könnten Ansichten für sie erstellen. Ich mit den Ansichten gehen würde.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow