Đó là một trường hợp hơi phức tạp. Lý do chính là bạn dường như có các bản sao trong cột TMP_DP_REGIAO.DS_PROTHEUS_CODE và MERGE cố gắng cập nhật cùng một hàng của bảng đích nhiều lần. Nhưng nếu giá trị mới và giá trị cũ trong các cột cập nhật giống nhau, Oracle có thể bỏ qua vấn đề trùng lặp này:
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
Nhưng nếu các giá trị cũ và mới khác nhau thì Oracle đưa ra trường hợp ngoại lệ mà bạn nhận được:
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