喜大師,我得到的錯誤ORA-01732:數據處理操作這種觀點不是法律執行下面的查詢剛開錯誤ORA-01732:數據處理操作不合法的這一觀點
UPDATE (SELECT CR.AMOUNT AS AMOUNT,
CASE
WHEN MRG.AMOUNT_USD=0
THEN CR.AMOUNT
ELSE MRG.AMOUNT_USD
END AS AMOUNT_BILAT,
CR.ISUPDATED
FROM CRS_TT_BILAT_EXCL_MERGE1 MRG,CRS_T_CURRENT_RATES1 CR
WHERE SUBSTR(CR.DNIS_CD,1,3)=MRG.DNIS_CD
AND CR.PRODUCT_CUST_ID = MRG.PRODUCT_CUST_ID
AND CR.ISUPDATED <> 'Y'
AND ROWNUM = 1)
SET AMOUNT = AMOUNT_BILAT;
CR.ISUPDATED = 'Y';
時
我已經從下面的簡化查詢上述代碼
UPDATE CRS_T_CURRENT_RATES1 CR
SET CR.AMOUNT =
(SELECT
CASE
WHEN MRG.AMOUNT_USD=0
THEN CR.AMOUNT
ELSE MRG.AMOUNT_USD
END
FROM CRS_TT_BILAT_EXCL_MERGE1 MRG
WHERE SUBSTR(CR.DNIS_CD,1,3)=MRG.DNIS_CD
AND CR.PRODUCT_CUST_ID = MRG.PRODUCT_CUST_ID
AND ROWNUM = 1),
CR.ISUPDATED = 'Y'
WHERE EXISTS
(SELECT 1 FROM CRS_TT_BILAT_EXCL_MERGE1 MRG WHERE MRG.DNIS_CD = SUBSTR(CR.DNIS_CD, 1,3) AND CR.PRODUCT_CUST_ID = MRG.PRODUCT_CUST_ID)
AND
CR.ISUPDATED <> 'Y';
我試圖優化第二查詢,由於第二查詢使用兩個選擇我試圖替換與一個查詢。任何人都可以幫助我嗎?
感謝您的回答Chorel我對ROW_NUMBER()函數有疑問,函數將在ON條件滿足之後應用,或者將首先應用於內部查詢。 – user2433145
條件'ORD_NO = 1'將應用於獲取數據集,然後使用'MERGE'的'ON'節中的條件將數據集匹配到CRS_T_CURRENT_RATES1。看看'MERGE'如何工作 - 鏈接到doc是由jonearles提供的。 – Chorel
你能告訴我爲什麼你已經用'ORD_NO = 1'條件了嗎?如果我們刪除'ROW_NUMBER()'和'ORD_NO = 1',增加這個查詢有多不同? – user2433145