Converting SQL Server Update Statement to Oracle
721916Sep 10 2009 — edited Sep 15 2009I am a SQL Server developer and our company has recently switched to Oracle. We are having challenges writing an Oracle Update statement and have 4 Oracle people looking at it and they are saying that it is not possible in Oracle. The oracle update query is saying that the subquery is returning multiple rows. The join on all the SK (FCAUPDATE to FCA) should produce a unique record.
Any help would be appreciated. I refuse to believe that this is not possible in Oracle and that we have to write individual update statement, hardcoding values.
SQL Server Update
UPDATE
FCA
SET
GEOGRAPHY_AREA_ID_SK = DGA_C.GEOGRAPHY_AREA_ID_SK
FROM
KMIDW.FACT_CUSTOMER_ADJUSTMENT FCA
INNER JOIN KMIDW.DIM_GEOGRAPHY_AREA DGA
ON DGA.GEOGRAPHY_AREA_ID_SK = FCA.GEOGRAPHY_AREA_ID_SK
INNER JOIN KMIDW.DIM_GEOGRAPHY_AREA DGA_C
ON DGA_C.SYSTEM_CODE_BK = DGA.SYSTEM_CODE_BK
AND DGA_C.REPORT_CODE_BK =DGA.REPORT_CODE_BK
AND DGA_C.AREA_NUMBER_BK = DGA.AREA_NUMBER_BK
AND DGA_C.FLAG_RECORD_CURRENT = 'C'
INNER JOIN KMIDW.DIM_DATE DD
ON DD.DATE_ID_SK = FCA.DATE_ID_SK
WHERE
DD.DATE_BK >= '01-Sep-2009'
AND DGA_C.GEOGRAPHY_AREA_ID_SK <> DGA.GEOGRAPHY_AREA_ID_SK
Oracle Update Query (won't work)
UPDATE
FACT_CUSTOMER_ADJUSTMENT FCA_UPDATE
SET
FCA_UPDATE.GEOGRAPHY_AREA_ID_SK = (
SELECT
DGA_C.GEOGRAPHY_AREA_ID_SK
FROM
FACT_CUSTOMER_ADJUSTMENT FCA
,DIM_GEOGRAPHY_AREA DGA
,DIM_GEOGRAPHY_AREA DGA_C
,DIM_DATE DD
WHERE
DGA.GEOGRAPHY_AREA_ID_SK = FCA.GEOGRAPHY_AREA_ID_SK
AND DGA_C.SYSTEM_CODE_BK = DGA.SYSTEM_CODE_BK
AND DGA_C.REPORT_CODE_BK =DGA.REPORT_CODE_BK
AND DGA_C.AREA_NUMBER_BK = DGA.AREA_NUMBER_BK
AND DGA_C.FLAG_RECORD_CURRENT = 'C'
AND DD.DATE_ID_SK = FCA.DATE_ID_SK
AND DD.DATE_BK >= '01-Sep-2009'
AND DGA_C.GEOGRAPHY_AREA_ID_SK <> DGA.GEOGRAPHY_AREA_ID_SK
AND FCA_UPDATE.ACCOUNT_CLASS_ID_SK = FCA.ACCOUNT_CLASS_ID_SK
AND FCA_UPDATE.ACCOUNT_TYPE_ID_SK = FCA.ACCOUNT_TYPE_ID_SK
AND FCA_UPDATE.ADJUSTMENT_ID_SK = FCA.ADJUSTMENT_ID_SK
AND FCA_UPDATE.BILLING_ADDRESS_ID_SK = FCA.BILLING_ADDRESS_ID_SK
AND FCA_UPDATE.CUSTOMER_ID_SK = FCA.CUSTOMER_ID_SK
AND FCA_UPDATE.DATE_ID_SK = FCA.DATE_ID_SK
AND FCA_UPDATE.DROP_ID_SK = FCA.DROP_ID_SK
AND FCA_UPDATE.GEOGRAPHY_AREA_ID_SK = FCA.GEOGRAPHY_AREA_ID_SK
AND FCA_UPDATE.PRODUCT_ID_SK = FCA.PRODUCT_ID_SK
AND FCA_UPDATE.SERVICE_ADDRESS_ID_SK = FCA.SERVICE_ADDRESS_ID_SK)