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

अद्यतन ओरेकल को मर्ज करें पंक्तियों का एक स्थिर सेट प्राप्त करने में असमर्थ

मैं यह दिखाने जा रहा हूं कि इस त्रुटि का स्रोत क्या है।
नीचे दिए गए सरल उदाहरण पर विचार करें:

CREATE TABLE A_100(
  x_system int,
  val int
);

INSERT INTO a_100 values( 1, 100 );
INSERT INTO a_100 values( 2, 200 );

CREATE TABLE B_100(
  x_system int,
  val int
);

INSERT INTO b_100 values( 1, 1100 );
INSERT INTO b_100 values( 2, 2000 );
INSERT INTO b_100 values( 2, 3000 );

commit;

अब कृपया इसे शामिल होने पर विचार करें:

SELECT *
FROM A_100 a
JOIN B_100 b
ON a.x_system = b.x_system AND a.x_system = 1
;

| X_SYSTEM | VAL | X_SYSTEM |  VAL |
|----------|-----|----------|------|
|        1 | 100 |        1 | 1100 |

उपरोक्त क्वेरी B_100 . तालिका से एक अद्वितीय रिकॉर्ड देती है . यदि आप मर्ज स्टेटमेंट में इस जॉइन कंडीशन का उपयोग करते हैं, तो मर्ज बिना किसी त्रुटि के चलेगा:

MERGE INTO A_100 a
USING B_100 b
ON ( a.x_system = b.x_system AND a.x_system = 1)
WHEN MATCHED THEN UPDATE SET a.val = b.val
;

1 row merged. 

अब कृपया नीचे दिए गए शामिल होने पर विचार करें:

SELECT *
FROM A_100 a
JOIN B_100 b
ON a.x_system = b.x_system AND a.x_system = 2
;

| X_SYSTEM | VAL | X_SYSTEM |  VAL |
|----------|-----|----------|------|
|        2 | 200 |        2 | 2000 |
|        2 | 200 |        2 | 3000 | 

उपरोक्त शामिल हों, A_100 . से एक रिकॉर्ड के लिए B_100 . से दो रिकॉर्ड देता है .

यदि आप उपरोक्त शामिल होने की शर्त के साथ MERGE का उपयोग करने का प्रयास करते हैं तो आपको निम्नलिखित प्राप्त होंगे:

MERGE INTO A_100 a
USING B_100 b
ON ( a.x_system = b.x_system AND a.x_system = 2)
WHEN MATCHED THEN UPDATE SET a.val = b.val
;

Error report -
ORA-30926: unable to get a stable set of rows in the source tables

Oracle बस आपको कहता है :

<ब्लॉकक्वॉट>

बाईं तालिका से एक रिकॉर्ड के लिए क्वेरी ने दो मान लौटाए:2000 और 3000 दाएँ तालिका से।
मैं बाईं तालिका के एकल स्केलर फ़ील्ड में दाएँ तालिका से दो मान निर्दिष्ट नहीं कर सकता, यह असंभव है।
कृपया शामिल होने की स्थिति बदलें ताकि यह प्रत्येक के लिए दाएँ तालिका से केवल एक अद्वितीय रिकॉर्ड दे बाईं तालिका में रिकॉर्ड करें




  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 में किसी फ़ाइल से डेटा को CLOB में कॉपी करना

  2. पीएल/एसक्यूएल सीखने के लिए विकास का माहौल तैयार करना

  3. ओरेकल में ए, बी प्रारूप में दो कॉलम डेटा कैसे प्राप्त करें?

  4. Oracle डाटाबेस में LIMIT क्लॉज के साथ PL/SQL बल्क कलेक्ट

  5. Oracle SQL डेवलपर के साथ डेटा कैसे निर्यात करें?