このエラーの原因を示します。
以下の簡単な例を検討してください。
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
から1つの一意のレコードを提供します 。マージステートメントでこの結合条件を使用すると、マージはエラーなしで実行されます:
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
からの1つのレコード B_100
から2つのレコードを提供します 。
上記の結合条件で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
オラクルは単にあなたに言います:
左側のテーブルからの1つのレコードのクエリは、右側のテーブルからの2000と3000の2つの値を返しました。
右側のテーブルから左側のテーブルの単一のスカラーフィールドに2つの値を割り当てることはできません。これは不可能です。
結合条件を変更して、右側のテーブルからそれぞれに1つの一意のレコードのみを与えるようにしてください。左の表に記録する