sql >> Databáze >  >> RDS >> Oracle

AKTUALIZACE zdánlivě klíčového zachování zobrazení v Oracle zvyšuje ORA-01779

Podařilo se mi „přesvědčit“ Oracle, aby provedl MERGE zavedením pomocného sloupce do cíle:

MERGE INTO (SELECT (SELECT t.account_no FROM dual) AS account_no_temp,
                    t.account_no, t.contract_id 
            FROM t) t
USING (
  SELECT u.account_no_old, u.account_no_new, v.contract_id
  FROM u, v
  WHERE v.tenant_id = u.tenant_id
) s
ON (t.account_no_temp = s.account_no_old AND t.contract_id = s.contract_id)
WHEN MATCHED THEN UPDATE SET t.account_no = s.account_no_new;

db<>ukázka houslí

UPRAVIT

Varianta výše uvedeného nápadu – dílčí dotaz byl přesunut přímo do ON část:

MERGE INTO (SELECT t.account_no, t.contract_id FROM t) t
USING (
      SELECT u.account_no_old, u.account_no_new, v.contract_id
      FROM u, v
      WHERE v.tenant_id = u.tenant_id
    ) s
ON ((SELECT t.account_no FROM dual) = s.account_no_old
     AND t.contract_id = s.contract_id)
WHEN MATCHED THEN UPDATE SET t.account_no = s.account_no_new;

db<>ukázka houslí2

Související článek:Sloupce uvedené v klauzuli ON nelze aktualizovat

ÚPRAVA 2:

MERGE INTO (SELECT t.account_no, t.contract_id FROM t) t
USING (SELECT u.account_no_old, u.account_no_new, v.contract_id
       FROM u, v
       WHERE v.tenant_id = u.tenant_id) s
ON((t.account_no,t.contract_id,'x')=((s.account_no_old,s.contract_id,'x')) OR 1=2) 
WHEN MATCHED THEN UPDATE SET t.account_no = s.account_no_new;

db<>ukázka houslí3



  1. Příklad připojení JavaFX MySQL prosím

  2. Mysql DISTINCT nefunguje, pokud přidám další sloupec

  3. Jak velký je Oracle XMLType, když je uložen jako BINARY XML

  4. phpMyAdmin - Chyba> Nesprávný parametr formátu?