multi insertをつかうと、1つのSQL文で複数テーブルに一括でデータ登録ができるようになります。
これにより、各テーブルに対してinsertする時と比べてトラフィックが削減できパフォーマンス向上が見込めるのではないかと思います。
例1
各テーブルに対して値を指定して挿入
1 insert all
2 into test1 (id, name) values (1, 'name1')
3 into test2 (id, name) values (1, 'name2')
4* select * from dual
2 rows created.
JDBCを使用した場合は、バインド変数を使用して挿入する値を埋め込んであげると良い。
PreparedStatement statement = connection.prepareStatement("INSERT ALL"
+ " INTO test1 VALUES (?, ?)"
+ " INTO test2 VALUES (?, ?)"
+ " SELECT * FROM dual");
statement.setInt(1, 1);
statement.setString(2, "あいうえお");
statement.setInt(3, 1);
statement.setString(4, "かきくけこ");
int count = statement.executeUpdate();
例2
副問い合わせの結果に応じてinsert先テーブルを切り替えるにはwhen句と組み合わせると良い。
1 insert all
2 when mod(id, 2) = 0 then
3 into test1
4 else
5 into test2
6* select id, name from test3
5 rows created.