表題の通り、sqlplus の SET AUTOTRACE TRACEONLY はトレースオンリーじゃなくてトランザクションが実行されていまいます。
autotrace.sql
SQL> CREATE TABLE TBL_A(C1 NUMBER);
Table created.
SQL> SELECT COUNT(*) FROM TBL_A;
COUNT(*)
----------
0
SQL> SET AUTOTRACE TRACEONLY; ★SET AUTOTRACE TRACEONLYを設定
SQL> INSERT INTO TBL_A SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 100; ★INSERT ~ SELECT文を実行
100 rows created.
Execution Plan
----------------------------------------------------------
Plan hash value: 1236776825
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | LOAD TABLE CONVENTIONAL | TBL_A | | | |
|* 2 | CONNECT BY WITHOUT FILTERING| | | | |
| 3 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(LEVEL<=100)
Statistics
----------------------------------------------------------
4 recursive calls
29 db block gets
9 consistent gets
0 physical reads
2908 redo size
833 bytes sent via SQL*Net to client
816 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
100 rows processed
SQL> COMMIT;
Commit complete.
SQL> SET AUTOTRACE OFF;
SQL> SELECT COUNT(*) FROM TBL_A;
COUNT(*)
----------
100 ★テーブルにレコードが挿入されている。
SQL>
「SET AUTOTRACE TRACEONLY」はあくまで SQL*Plus の表示上の問題で、
実行する SQL文の意味合いが変わる訳ではないんやで 彡(゚)(゚)
SQL*Plus の マニュアルもどうぞ。
SQL*Plus ユーザーズ・ガイドおよびリファレンス
リリース11.2 B56314-03
SET AUTOTRACE
http://docs.oracle.com/cd/E16338_01/server.112/b56314/ch_twelve040.htm#i2698680