Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2880583
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2010-08-24 18:17:00

今天有人问到,在SQL*PLUS下执行一个脚本 ,里面是INSERT 语句,如果遇到主键重复错误,后面的SQL语句是否还继续执行。

后面的SQL语句能否执行,是可以通过SQLPLUS的设置的。

默认是不退出 ,继续执行下面的SQL语句。

C:\>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 8月 24 17:57:38 2010

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine
and Real Application Testing options

SQL> host type test.sql
insert into dept(deptno) values(10);
insert into dept(deptno) values(50);


SQL> select * from dept;

    DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------
        10 ACCOUNTING                   NEW YORK
        20 RESEARCH                     DALLAS
        30 SALES                        CHICAGO
        40 OPERATIONS                   BOSTON

SQL> @test.sql
insert into dept(deptno) values(10)
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_DEPT)

 

已创建 1 行。

SQL> select * from dept;

    DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------
        50
        10 ACCOUNTING                   NEW YORK
        20 RESEARCH                     DALLAS
        30 SALES                        CHICAGO
        40 OPERATIONS                   BOSTON


SQL> rollback;

回退已完成。

SQL> SELECT * FROM DEPT;

    DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------
        10 ACCOUNTING                   NEW YORK
        20 RESEARCH                     DALLAS
        30 SALES                        CHICAGO
        40 OPERATIONS                   BOSTON

SQL> WHENEVER SQLERROR EXIT

SQL> @test.sql
insert into dept(deptno) values(10)
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_DEPT)


从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine
and Real Application Testing options 断开

设置 了WHENEVER SQLERROR EXIT  那么当出现错误的时候,SQLPLUS将会退出。

默认是 WHENEVER SQLERROR CONTINUE


SQL> whenever --help
用法: WHENEVER SQLERROR
{ CONTINUE  [ COMMIT | ROLLBACK | NONE ]
     | EXIT  [ SUCCESS | FAILURE | WARNING | n | | : ]

             [ COMMIT | ROLLBACK ] }

用法: WHENEVER OSERROR
{ CONTINUE  [ COMMIT | ROLLBACK | NONE ]  |  EXIT [ SUCCESS | FAILURE |
         WARNING | n | | : | OSCODE ]
             [ COMMIT | ROLLBACK ] }


这个选项还蛮多的,还可以设置whenever sqlerror  continue rollback; 遇到错误回滚前面的。下面的还可以继续提交。类似

ROLLBACK TO SAVEPOINT

阅读(4835) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~