[20160806]sqlplus 1000行自動提交.txt

lfree發表於2016-08-08
[20160806]sqlplus 1000行自動提交.txt

--同事要求我提交的插入指令碼要求1000行有1個提交.
--當時我自己也沒有多想,因為toad有一個功能可以直接實現這個功能.

結果集上點選右鍵選擇=>'export dataset':

export format 選擇 insert statments
commit interval 選擇1000,這樣生成的sql指令碼就是每隔1000條記錄有1個提交.

--假如已經生成了指令碼,如何修好呢?以scott.dept表為例來說明:

SET DEFINE OFF;
Insert into SCOTT.DEPT
   (DEPTNO, DNAME, LOC)
 Values
   (10, 'ACCOUNTING', 'NEW YORK');
Insert into SCOTT.DEPT
   (DEPTNO, DNAME, LOC)
 Values
   (20, 'RESEARCH', 'DALLAS');
Insert into SCOTT.DEPT
   (DEPTNO, DNAME, LOC)
 Values
   (30, 'SALES', 'CHICAGO');
Insert into SCOTT.DEPT
   (DEPTNO, DNAME, LOC)
 Values
   (40, 'OPERATIONS', 'DALLAS');
COMMIT;

--我想到最簡單的方法就是利用vim的宏記錄功能.
--假如要2條提交一次.首先輸入如下內容:
:set nowrapscan
2/);$oicommit;

:set nowrapscan^M2/);$oicommit;
--注意:^m 在windows下 ctrl+q ctrl+M,linux下使用ctrl+v ctrl+M.

--然後移動上面一行開頭,執行"aY,這樣以上內容記錄在register a中. => 在windows下ctrl+q ctrl+[ 表示
--數字2表示2條加入1個commit;
--這樣在打入 數字(表示重複次數)@a,就可以了.

--如果檔案很大,使用vim編輯還是不方便.我看了一下sqlplus文件:
 AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n}


這樣只要執行
set AUTOcommit 2 ;

--//就可以實現2條提交一次,做一個簡單測試.

SCOTT@test01p> create table t ( id number);
Table created.

SCOTT@test01p> set autocommit 2
SCOTT@test01p> insert into t values(1);
1 row created.

--開啟另外的會話:
SCOTT@test01p> select * from t;
no rows selected

--回到原來的會話:
SCOTT@test01p> insert into t values(2);
1 row created.
Commit complete.

--很明顯後面自動加入1個提交.

--開啟另外的會話:
SCOTT@test01p> select * from t;
        ID
----------
         1
         2

--發現已經提交了.這種方式完成後最好退出,不要將這樣設定在glogin.sql配置中.
--預設設定是
SCOTT@test01p> show autocommit
autocommit OFF


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2123181/,如需轉載,請註明出處,否則將追究法律責任。

相關文章