थोड़ा पेचीदा मामला है। प्राथमिक कारण यह है कि ऐसा लगता है कि आपके पास TMP_DP_REGIAO.DS_PROTHEUS_CODE कॉलम में डुप्लिकेट हैं और MERGE गंतव्य तालिका की एक ही पंक्ति को कई बार अपडेट करने का प्रयास करता है। लेकिन अगर अपडेट किए गए कॉलम में नए मान और पुराने मान समान हैं, तो Oracle डुप्लिकेट के इस मुद्दे को छोड़ सकता है:
SQL> select * from t;
CODE TEXT
---------- ----------
1 test
SQL> merge into t using (
2 select 1 code,'test' text from dual union all
3 select 1 code,'test' text from dual
4 ) s
5 on (t.code = s.code)
6 when matched then
7 update set t.text = s.text
8 /
2 rows merged
लेकिन अगर पुराने और नए मान अलग हैं, तो Oracle आपको मिलने वाले अपवाद को उठाता है:
SQL> merge into t using (
2 select 1 code,'a' text from dual union all
3 select 1 code,'a' text from dual
4 ) s
5 on (t.code = s.code)
6 when matched then
7 update set t.text = s.text
8 /
merge into t using (
*
error in line 1:
ORA-30926: unable to get a stable set of rows in the source tables