FORALL 문으로 수행한 DML 문의 수행 횟수처럼 executeBatch 메소드로 수행한 DML 문의 수행 횟수도 executeBatch 메소드의 수행 횟수로 기록됩니다.
테스트를 위해 아래와 같이 테이블을 생성하겠습니다.
-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER);
아래 내용으로 BatchInsertTest.java 파일을 생성하겠습니다.
import java.sql.*;
public class BatchInsertTest {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@//192.168.0.10:1519/ORA19C";
String user = "tuna";
String password = "tuna";
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("INSERT /* TEST */ INTO T1 VALUES (?)");
for (int i = 0; i < 100; i++) {
pstmt.setInt(1, i + 1);
pstmt.addBatch();
}
pstmt.executeBatch();
conn.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
아래와 같이 java 파일을 컴파일한 후 실행하겠습니다.
C:\>javac BatchInsertTest.java
C:\>java -classpath .;.\ojdbc8.jar BatchInsertTest
V$SQL 뷰를 조회해보면 수행 횟수(executions)가 1으로 executeBatch 메소드 수행 횟수와 동일한 것을 확인할 수 있습니다.
-- 2
SELECT sql_text, executions, buffer_gets, rows_processed
FROM v$sql
WHERE sql_text LIKE 'INSERT /* TEST */ INTO T1 VALUES%';
SQL_TEXT EXECUTIONS BUFFER_GETS ROWS_PROCESSED
-------------------------------------- ---------- ----------- --------------
INSERT /* TEST */ INTO T1 VALUES (:1 ) 1 50 100
1개의 행이 선택되었습니다.