Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle में प्रतीत होता है महत्वपूर्ण संरक्षण दृश्य पर अद्यतन ORA-01779

मैं लक्ष्य में सहायक कॉलम पेश करके Oracle को MERGE करने के लिए "कायल" करने में कामयाब रहा:

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<>fiddle डेमो

संपादित करें

उपरोक्त विचार का एक रूपांतर - सबक्वेरी सीधे ON . पर ले जाया गया भाग:

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<>fiddle demo2

संबंधित लेख:ऑन क्लॉज में संदर्भित कॉलम को अपडेट नहीं किया जा सकता

संपादित करें 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<>fiddle demo3



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकीकरण परीक्षण के लिए एंबेडेड या प्रबंधित Oracle उदाहरण

  2. Oracle डेटाबेस में FORALL स्टेटमेंट का परिचय

  3. मैं DBMS_METADATA (और SCHEMA_EXPORT) के साथ DDL स्क्रिप्ट के रूप में Oracle SCHEMA कैसे प्राप्त करूं?

  4. मैं SQL का उपयोग करके तारों के त्रिभुज को कैसे प्रिंट कर सकता हूँ?

  5. ओरेकल इंस्टेंट क्लाइंट और एंटिटी फ्रेमवर्क कॉन्फ़िगरेशन के साथ परेशानी