Oracle 的异常和回滚

DECLARE
dept_no NUMBER (2) := 70;
BEGIN
--开始事务
INSERT INTO dept
VALUES (dept_no, '市场部', '北京'); --插入部门记录
INSERT INTO dept
VALUES (dept_no, '后勤部', '上海'); --插入相同编号的部门记录
INSERT INTO emp --插入员工记录
VALUES (7997, '威尔', '销售人员', NULL, TRUNC (SYSDATE), 5000,300, dept_no);
--提交事务
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN --捕足异常
DBMS_OUTPUT.PUT_LINE(SQLERRM); --显示异常消息
ROLLBACK; --回滚异常

ollback会默认回滚所有事务,savepoint可以保存点,rollback可以回滚到前一个点,减少数据重复操作。

DECLARE
dept_no NUMBER (2) :=90;
BEGIN
--开始事务
SAVEPOINT A;
INSERT INTO dept
VALUES (dept_no, '市场部', '北京'); --插入部门记录
SAVEPOINT B;
INSERT INTO emp --插入员工记录
VALUES (7997, '威尔', '销售人员', NULL, TRUNC (SYSDATE), 5000,300, dept_no);
SAVEPOINT C;
INSERT INTO dept
VALUES (dept_no, '后勤部', '上海'); --插入相同编号的部门记录
--提交事务
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN --捕足异常
DBMS_OUTPUT.PUT_LINE(SQLERRM); --显示异常消息
ROLLBACK TO B; --回滚异常
END;

异常的处理格式

在plsql 块中格式

Declare
变量
Begin
代码块 EXCEPTION
when 异常的名称 then
如生上面的异常时做的具体工作。
End;

常用异常处理:

set serveroutput on;
create or replace procedure pr12
as
--定义一个int变liang
v_age integer;
v_name varchar(30);
begin
v_age:=89;
--通过select给v_name设置值
--修改成过程
select name into v_name from stud where id=1;
DBMS_OUTPUT.PUT_LINE('没有出错');
exception
when value_error then
SYS.DBMS_OUTPUT.PUT_LINE('数值错误');
when no_data_found then
SYS.DBMS_OUTPUT.PUT_LINE('没有数据');
when others then
SYS.DBMS_OUTPUT.PUT_LINE(sqlcode||'你出错了'||sqlerrm);
end; exec pr12();
-----------------------------------------
--自定义异常自己抛出异常/
/*
定义一个自己的异常
myException Exception;
抛出异常
RAISE myException; 处理自己的异常:
Exception
When myException then
....
*/
set serveroutput on;
declare
myEx exception;
begin
DBMS_OUTPUT.PUT_LINE('这里没错');
raise myEx;
DBMS_OUTPUT.PUT_LINE('不会输出,前面抛出异常');
--处理异常
exception
when myEx then
DBMS_OUTPUT.PUT_LINE('自己的异常'||sqlcode||' '||sqlerrm);
when others then
DBMS_OUTPUT.PUT_LINE('不知知道什么错误'||sqlcode||sqlerrm);
END;
---出错直接抛出 declare
begin
DBMS_OUTPUT.PUT_LINE('no errors');
--直接抛出
RAISE_APPLICATION_ERROR(-20000, 'A');
DBMS_OUTPUT.PUT_LINE('go okk....');
exception
when others then
DBMS_OUTPUT.PUT_LINE(sqlcode||' '||sqlerrm);
end;

Oracle 事务和异常处理的更多相关文章

  1. Asp.Net事务和异常处理:

    Asp.Net事务和异常处理: 一.什么是事务处理? 事务处理是一组组和成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将控制和维护每个数据库的一致性和完整性. 如果在事务过程中没有遇到错误, ...

  2. Oracle事务

    Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolatio ...

  3. 浅谈Oracle事务【转载竹沥半夏】

    浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...

  4. Oracle事务之一:锁和隔离

    Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇 ...

  5. oracle事务和锁

    数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...

  6. oracle事务和锁(转)

    If you use a SET TRANSACTION statement, then it must be the first statement in your transaction. How ...

  7. oracle事务(转)

    今天温习oracle事务,记录如下: 事务定义            事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败.        我们 ...

  8. oracle 事务 与 提交

    Oracle事务 一般事务(DML)即数据修改(增.删.改)的事务事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)同时对这些数据的修改操作.当事务被提交或回滚后,这些数据才会被 ...

  9. Oracle事务隔离级别处理差异

    Oracle事务隔离是事务读操作不同程度的数据隔离,分为READ_UNCOMMITTED.READ_COMMITTED(默认).SERIALIZABLE. Oracle事务隔离级别SERIALIZAB ...

随机推荐

  1. 全文检索的Demo

    用到lucene版本为6.3.0版本,利用的分词器为IKAnalyzer分词器,该分词对中文有较好的支持.关于支持lucene的6.xx以上的IkAnalyzer分词jar包下载地址:https:// ...

  2. useradd语法2

    在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for adding users),所以 Debian 系的 ...

  3. C# 日志记录分级功能使用 按照日期,大小,或是单文件存储

    本文将使用一个Nuget的一个组件库来实现一个简单强大的日志记录功能,包采用线程安全实现,所有的记录在后台完成,即使您在前台调用100万次方法,耗时也不过1000ms(具体时间依照电脑性能决定),支持 ...

  4. 安装pitchpork 及 pacbioscience 的问题及解决

    1. error while loading shared libraries: libpbbam.so: cannot open shared 解决: find -name  libpbbam.so ...

  5. 【Oracle入门】数据库的二级映像

    数据库系统 的模式.内模式.外模式之间有很大的差别,为了实现用户和数据之间的透明化,DBMS提供了两层映像:外模式.模式映像和模式/内模式u映像.有了这两层映像,用户就能逻辑地.抽象地处理数据,而不必 ...

  6. React Native 调用 Web3(1.x) 的正确姿势

    1 创建项目 react-native init lm1 cd lm1 2 安装依赖包 yarn add node-libs-browser 3 创建 rn-cli.config.js 脚本 cons ...

  7. 测试那些事儿—软测必备的Linux知识(一)

    1.Linux入门须知 1.1文件.目录 linux文件:Linux所有的内容都是以文件形式保存,包括硬件(一切内容皆文件),并且linux不靠扩展名区分文件类型. linux文件有多种基本类型,常见 ...

  8. Arcmap查找孤路

    本文将介绍如何查出孤路——如下图红色框中的路: 方法一:使用拓扑检查 1. 使用merge,将所有道路合并到一个图层.注意,不能先分图层进行拓扑检查,因为本不是孤路的数据可能会被挑出来. 2. 对合并 ...

  9. hibernate模拟(转载)

    package simulation; /** * * @author Administrator * */ public class User { private int id; private S ...

  10. Hanlp分词1.7版本在Spark中分布式使用记录

    新发布1.7.0版本的hanlp自然语言处理工具包差不多已经有半年时间了,最近也是一直在整理这个新版本hanlp分词工具的相关内容.不过按照当前的整理进度,还需要一段时间再给大家详细分享整理的内容.昨 ...