2017-03-21 35 views
0
CREATE OR REPLACE 
PROCEDURE "UNASSIGN_CUSTOMER_FEATURES" 
(CustomerID_Param IN NUMBER, FeatureID_Param IN NUMBER, WalletID_Param IN NUMBER) 
AS 
BEGIN 

DELETE FROM CUSTOMER_EXTRA_FEATURES WHERE FEATURES_ID = FeatureID_Param 
AND CUSTOMER_ID = CustomerID_Param; 

MERGE INTO CUSTOMER_SERVICE_CONFIG c 
USING 
      (SELECT BUSINESS_SERVICE_CONFIG.ID from BUSINESS_SERVICE_CONFIG join SERVICE_CONFIG_MAP 
        ON BUSINESS_SERVICE_CONFIG.Business_SERVICE_TYPE = SERVICE_CONFIG_MAP.Service_type_ID 
        and BUSINESS_SERVICE_CONFIG.ORGANIZATION_ID = WalletID_Param 
        and BUSINESS_SERVICE_CONFIG.BUSINESSSERVICECATEGORY = 0 
        and SERVICE_CONFIG_MAP.FEATURES_ID = FeatureID_Param) ids 

ON (c.SERVICE_CONFIG_ID = ids.ID and c.CUSTOMER_ID = CustomerID_Param) 
WHEN MATCHED THEN 
DELETE WHERE CUSTOMER_ID = CustomerID_Param AND SERVICE_CONFIG_ID = ids.ID; 

END; 

回答

0

你正在做一個DELETE

WHEN MATCHED THEN 
    UPDATE SET <some field> with <some value> 
    DELETE WHERE CUSTOMER_ID = CustomerID_Param AND SERVICE_CONFIG_ID =ids.ID; 
END; 
之前缺少一個UPDATE語句成功

請參閱以下網址: Oracle sql merge to insert and delete but not update

希望幫助!

0

The syntax diagram for the merge statement表明你的delete條款是update的可選部分,而不是獨立的:

enter image description here

你得到「ORA-00905:缺少關鍵字」錯誤,因爲你不知道有一個update。您可以放入一個虛擬更新,但看起來您確實希望刪除所有匹配的行,而不更新其他行或插入新行;這將是作爲一個普通的delete簡單,類似:

DELETE FROM CUSTOMER_SERVICE_CONFIG c 
WHERE CUSTOMER_ID = CustomerID_Param 
AND SERVICE_CONFIG_ID IN (
    SELECT BUSINESS_SERVICE_CONFIG.ID from BUSINESS_SERVICE_CONFIG join SERVICE_CONFIG_MAP 
    ON BUSINESS_SERVICE_CONFIG.Business_SERVICE_TYPE = SERVICE_CONFIG_MAP.Service_type_ID 
    and BUSINESS_SERVICE_CONFIG.ORGANIZATION_ID = WalletID_Param 
    and BUSINESS_SERVICE_CONFIG.BUSINESSSERVICECATEGORY = 0 
    and SERVICE_CONFIG_MAP.FEATURES_ID = FeatureID_Param); 

DELETE FROM CUSTOMER_SERVICE_CONFIG c 
WHERE CUSTOMER_ID = CustomerID_Param 
AND EXISTS (
    SELECT null from BUSINESS_SERVICE_CONFIG join SERVICE_CONFIG_MAP 
    ON BUSINESS_SERVICE_CONFIG.Business_SERVICE_TYPE = SERVICE_CONFIG_MAP.Service_type_ID 
    and BUSINESS_SERVICE_CONFIG.ORGANIZATION_ID = WalletID_Param 
    and BUSINESS_SERVICE_CONFIG.BUSINESSSERVICECATEGORY = 0 
    and SERVICE_CONFIG_MAP.FEATURES_ID = FeatureID_Param 
    WHERE BUSINESS_SERVICE_CONFIG.ID = c.SERVICE_CONFIG_ID); 
+0

OK感謝很多工程:) –

相關問題