oracle存储过程对异常的处理_sqlserver创建存储过程

oracle存储过程对异常的处理_sqlserver创建存储过程在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 … update statement 2 … de…

在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法:

begin tran
update statement 1 ...
update statement 2 ...
delete statement 3 ...
insert statement 4 ...
commit tran

代码100分

这样编写的SQL存在很大隐患。请看下面的例子:

代码100分create table demo(id int not null)
go
begin tran
insert into demo values (null)
insert into demo values (2)
commit tran
go

执行时会出现一个违反not null 约束的错误信息,但随后又提示(1 row(s) affected)。 我们执行select * from demo 后发现insert into demo values(2) 却执行成功了。 这是什么原因呢? 
原来 SQL Server在发生runtime 错误时,默认会rollback引起错误的语句,而继续执行后续语句。
如何避免这样的问题呢?有三种方法:
1. 在事务语句最前面加上set xact_abort on

set xact_abort on
begin tran
update statement 1 ...
update statement 2 ...
delete statement 3 ...
commit tran
go

当xact_abort 选项为on 时,SQL Server在遇到错误时会终止执行并rollback 整个事务。
2. 在每个单独的DML语句执行后,立即判断执行状态,并做相应处理。

代码100分begin tran
update statement 1 ...
if @@error <> 0
begin rollback tran
goto labend
end
delete statement 2 ...
if @@error <> 0
begin rollback tran
goto labend
end
commit tran
labend:
go

3. 在SQL Server 2005中,可利用 try…catch 异常处理机制。

begin tran
begin try
update statement 1 ...
delete statement 2 ...
endtry
begin catch
if @@trancount > 0
rollback tran
end catch
if @@trancount > 0
commit tran
go

 

下面是个简单的存储过程,演示事务处理过程。

create procedure dbo.pr_tran_inproc as begin set nocount on
begin tran
update statement 1 ...
if @@error <> 0
begin rollback tran
return -1 end
delete statement 2 ...
if @@error <> 0
begin rollback tran
return -1
end commit tran
return 0
end
go

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10912.html

(0)
上一篇 2022-12-19
下一篇 2022-12-19

相关推荐

  • Hive——安装以及概述

    Hive——安装以及概述一、hive的安装 注意:安装hive的前提要安装好MySQL和Hadoop Hadoop安装:https://www.cnblogs.com/lmandcc/p/15306163.html MySQ

    2023-04-23
    100
  • 数据库原理四-[通俗易懂]

    数据库原理四-[通俗易懂]重做日志redo log redo log是重做日志,为InnoDB存储引擎独有。它记录了数据页上的改动。当事务中修改了数据,将会备份存储。 当发生数据库服务器宕机或者脏页未写入磁盘,可以通过redo

    2023-04-29
    91
  • 数据库 什么是关系_数据库关系表

    数据库 什么是关系_数据库关系表计算机学习者经常会用到诸如Sqlserver Mysql Orcal 等“关系型”数据库。 问题一:那么,到底什么是“关系”呢? 首先,我们来看以下三组数据 注:A1,A2表示具体的某个人,比如张三,

    2022-12-28
    113
  • Python字典:快速查找和管理数据

    Python字典:快速查找和管理数据Python是一种强大的编程语言,拥有多种数据结构来帮助开发人员处理和管理数据。字典(Dictionary)是Python中最常用的数据结构之一。Python字典提供了基于键(key)和值(value)的快速查找和管理数据的方式。当你需要管理键和值对应关系时,Python字典是最为合适的选择。

    2024-03-03
    39
  • Python中的Exp函数:计算指数函数值

    Python中的Exp函数:计算指数函数值对于数学中的指数函数,我们可以用python中内置的exp()函数来计算其数值。Exp函数的名称来自于英文单词“exponential(“指数的”)”的缩写,它用于计算以自然常数e为底数的指数函数的数值。一个以e为底数的指数函数的一般形式为:

    2024-04-05
    27
  • 不适合使用字典的情况

    不适合使用字典的情况字典是一种无序的Python数据类型,元素的排列顺序不固定,这在某些情况下是不适合使用字典的。例如,如果我们需要有序地存储一系列数据,使用字典就会产生问题,因为字典无法保证元素的顺序。此时,可以考虑使用Python的OrderedDict类型或者其他有序的数据类型。

    2024-02-13
    70
  • 深度系统安装mysql

    深度系统安装mysql# 安装 Mysql 8.0.19下载 MySQL Community Server 8.0.19 【Compressed TAR Archive】(mysql-8.0.19-linux-glibc…

    2023-04-05
    109
  • postgresql开篇 – knowledge

    postgresql开篇 – knowledgepostgresql 作为官方号称的最先进的开源数据库,从今天(2020-1-19)起开始系统的学习一下,记录自己学习的点点滴滴。

    2023-01-23
    101

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注