2010-11-02 12 views
2

Je reçois une erreur avec cette requête:erreur ORA-30926 lors de l'exécution de la fusion dans la requête

MERGE INTO edw_clctns_equip_dim d 
    USING psa_equipment_status_history 
     ON (dw_equipment_id = TO_NUMBER (d.clctns_equip_source_id) 
      AND d.active_ind = 'Y') 
WHEN MATCHED THEN 
    UPDATE 
    SET clctns_initial_status_date = 
      (SELECT MIN (effective_date) 
       FROM psa_equipment_status_history 
       WHERE dw_equip_status_type_id IN (
             SELECT dw_equip_status_type_id 
             FROM psa_equipment_status_type 
             WHERE equipment_status_code = '100') 
       AND current_flag = 'Y' 
       AND iud_flag <> 'D' 
       AND dw_equipment_id = TO_NUMBER (d.clctns_equip_source_id)) 

je peux utiliser la requête de mise à jour simple, mais il est de prendre trop de temps. Est-ce que l'instruction de fusion aide?

Update EDW_CLCTNS_EQUIP_DIM d 
Set CLCTNS_INITIAL_STATUS_DATE = 
(SELECT 
    MIN(EFFECTIVE_DATE) 
    FROM PSA_EQUIPMENT_STATUS_HISTORY 
    WHERE DW_EQUIP_STATUS_TYPE_ID In 
    (Select DW_EQUIP_STATUS_TYPE_ID 
    From PSA_EQUIPMENT_STATUS_TYPE 
    Where EQUIPMENT_STATUS_CODE = '100' 
) 
    AND CURRENT_FLAG = 'Y' 
    AND IUD_FLAG<>'D' 
    AND DW_EQUIPMENT_ID=to_number(d.CLCTNS_EQUIP_SOURCE_ID) 
); 
+0

Avez-vous vérifié la réponse à [ORA-30926: impossible d'obtenir un ensemble stable de lignes dans la source tables] (http://stackoverflow.com/questions/2337271/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables/2337465#2337465)? –

+0

la table psa_equipment_status_history contenait plusieurs entrées d'où l'erreur – Ramkumar

+0

merci peter lang – Ramkumar

Répondre

1

Eh oui désolé pour l'affichage de la question, je vérifiait que la table cible pas la source

merge 
into EDW_CLCTNS_EQUIP_DIM d 
using 
(
SELECT 
MIN(EFFECTIVE_DATE) as STATUS_DATE,DW_EQUIPMENT_ID 
FROM PSA_EQUIPMENT_STATUS_HISTORY 
WHERE DW_EQUIP_STATUS_TYPE_ID in (select DW_EQUIP_STATUS_TYPE_ID from PSA_EQUIPMENT_STATUS_TYPE where EQUIPMENT_STATUS_CODE = '100') AND 
CURRENT_FLAG = 'Y' 
AND IUD_FLAG<>'D' 
group by DW_EQUIPMENT_ID 
) a 
on (d.CLCTNS_EQUIP_SOURCE_ID=to_char(a.DW_EQUIPMENT_ID) and d.ACTIVE_IND='Y') 
WHEN MATCHED 
THEN 
UPDATE 
SET CLCTNS_INITIAL_STATUS_DATE = a.STATUS_DATE;