ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

sqlplus の SET AUTOTRACE TRACEONLY は トレースオンリーじゃなくてトランザクションが実行されてしまう。

表題の通り、sqlplus の SET AUTOTRACE TRACEONLY はトレースオンリーじゃなくて
トランザクションが実行されていまいます。

SELECT文では問題になりませんが、INSERT/UPDATE/DELETE は
実際にデータが更新されていまうので、気を付けて下さいませ(´・ω・)ゞ

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

Qiitaにも投稿してみたやで 彡(^)(^)

sqlplus の SET AUTOTRACE TRACEONLY は トレースオンリーじゃなくてトランザクションが実行されてしまう。
http://qiita.com/ora_gonsuke777/items/bff8c63252375a4ff1df