1. ホーム
  2. オラクル

バッチ更新は、更新[0]から予期しない行数を返しました;実際の行数。実際の行数:2、期待値:1。

2022-02-25 19:50:24


さっそく、例外をスローしてみましょう。 

バッチ更新は、更新[0]から予期しない行数を返しました; 実際の行数です。実際の行数: 2; 予想: 1。


<スパン 解決策を掲載する


<スパン テストライブラリなのでidが重複しているデータです それほど厳密なid生成戦略ではなく、いくつかのテーブルが共通で、データが重複している状態です





重複行の照会と削除のためのSQLステートメント
1、テーブル内の余分な重複レコードを見つける、重複レコードは、単一のフィールド(Id)に基づいています。
select * from table where Id in (select Id from table group byId having count(Id) > 1)
2、テーブル内の冗長な重複レコードを削除し、重複レコードは、単一のフィールド(Id)を決定するために、最小のrowidを持つレコードのみを残して基づいている
DELETE from table WHERE (id) IN ( SELECT id FROM table GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM table GROUP BY id HAVING COUNT(*) > 1) ;
3は、冗長な重複レコード(複数フィールド)のテーブルを見つける
select * from table a where (a.Id,a.seq) in(select Id,seq from table group by Id,seq having count(*) > 1)
4、テーブル内の余分な重複レコード(複数フィールド)を削除し、最小のrowidを持つレコードだけを残します。
テーブルaから削除 (a.Id,a.seq) in (select Id,seq from table group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from table group by Id,seq having count(*)> 1))
5、最小の行番号を持つレコードを含まない、テーブル内の余分な重複レコード(複数フィールド)を検索する。
select * from table a where (a.Id,a.seq) in (select Id,seq from table group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from table group by Id,seq having count(*)> 1)

これらは、以下のようなステートメントを使用する必要があります。 <スパン 余分なデータを削除する
そして、生成戦略のサイズを大きくする


そして、いい感じ