Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

menggabungkan pembaruan oracle tidak bisa mendapatkan set baris yang stabil

Saya akan menunjukkan apa sumber kesalahan ini.
Perhatikan contoh sederhana di bawah ini:

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;

Sekarang tolong pertimbangkan bergabung ini:

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 |

query di atas memberikan satu record unik dari tabel B_100 . Jika Anda menggunakan kondisi bergabung ini dalam pernyataan gabungan, penggabungan akan berjalan tanpa kesalahan:

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. 

Sekarang silakan pertimbangkan bergabung di bawah ini:

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 | 

Gabung di atas, untuk satu catatan dari A_100 memberikan dua catatan dari B_100 .

Jika Anda mencoba menggunakan MERGE dengan syarat bergabung di atas, Anda akan mendapatkan yang berikut:

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 hanya mengatakan Anda :

Kueri untuk satu catatan dari tabel kiri mengembalikan dua nilai:2000 dan 3000 dari tabel kanan.
Saya tidak dapat menetapkan dua nilai dari tabel kanan ke satu bidang skalar tabel kiri, ini tidak mungkin.
Mohon ubah kondisi join sehingga hanya memberikan satu record unik dari tabel kanan untuk masing-masing catat di tabel kiri




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Adaptor Jaringan tidak dapat membuat koneksi saat terhubung dengan Oracle DB

  2. TNS-12505:TNS:pendengar saat ini tidak mengetahui SID yang diberikan di deskriptor koneksi

  3. Operator Oracle UNION Dijelaskan

  4. Hubungan pendek Oracle CASE tidak bekerja dalam grup oleh

  5. SELECT SUM mengembalikan baris ketika tidak ada catatan