ITPub博客

首页 > 数据库 > Oracle > [20160806]sqlplus 1000行自动提交.txt

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

原创 Oracle 作者:lfree 时间:2016-08-08 20:27:11 0 删除 编辑
[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博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2123181/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969673