INSERT ALL 문은 대상 테이블에 삽입한 전체 로우 수가 *_TAB_MODIFICATIONS 뷰의 변경 정보로 저장됩니다.
테스트를 위해 아래와 같이 테이블을 생성하겠습니다.
-- 1
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;
CREATE TABLE t1 (c1 NUMBER);
CREATE TABLE t2 (c1 NUMBER);
아래 INSERT ALL 문은 t1, t2 테이블에 각각 100 로우를 삽입합니다. 이어서 ROLLBACK 문을 수행하겠습니다.
-- 2
INSERT ALL
INTO t1
INTO t2
SELECT ROWNUM AS c1
FROM XMLTABLE ('1 to 100');
200 행이 생성되었습니다.
ROLLBACK;
*_TAB_MODIFICATIONS 뷰를 조회하면 t1, t2 테이블의 inserts 값이 각각 100이 아닌 200으로 저장된 것을 확인할 수 있습니다. 아울러 롤백을 수행하더라도 변경 정보가 유지되는 것을 알 수 있습니다.
-- 3-1
EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
-- 3-2
SELECT table_name, inserts
FROM user_tab_modifications
WHERE table_name IN ('T1', 'T2');
TABLE_NAME INSERTS
---------- -------
T1 200
T2 200
2 행이 선택되었습니다.