`

详解数据库之存储过程与错误处理

阅读更多

定义:

  为了完成特定功能,预先用SQL语句写好并经编译后存储在数据库中。

看到定义,刚开始学习的人一定有很多的疑问,到底存储过程和一般的SQL语句有什么区别呢?

存储过程的优点:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程一旦被创建,在程序中调用任意多次,重复使用,可减少数据库开发人员的工作量,最大的优点是允许模块化的程序设计。

4.安全性高。即时是没有访问存储过程引用表或视图的用户也可以访问执行存储过程

5.存储过程可以减少网络流量。用户可以发送一个单独的语句实现一个复杂的操作,不需要发送多条SQL语句,较少了客户端和服务器请求的数量。

一.创建存储过程

 

create procedure sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
以上格式还可以简写成:
create proc sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
/*注:“sp_name”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/

 

二、执行存储过程

 

执行存储过程有三种方式,下面为大家一一介绍:

1.通过自身执行

基本语法:execprocedure_name[参数名]

2.INSERT语句中执行

基本语法:

 

CREATEPROCEDURE procedure_name
@[Param1][类型],@[Param2] [类型]
AS
BEGIN
 insert into 表名(Param1,Param2,Param3) values(@Param1,@Param2,@Param3)
END

 

3.通过右键菜单执行

1.右击要执行的存储过程,如下图:


2.选择【执行存储过程】命令,打开【执行过程】窗口


三.管理存储过程

.修改存储过程

基本语法:

Alter procedure procedure_name[参数名]

.删除存储过程

1.基本语法:

drop procedureprocedure_name[参数名]

2.注意事项

不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.错误信息处理

 

为了提高存储过程的效率,存储过程应该包含与用户进行交互的事物状态(成功或失败)的错误信息。在此,我主要为大家介绍@@error这种方式:

在做机房收费系统中添加学生信息,需要处理多个表,因此用到了存储过程,下面主要是通过创建此存储过程为大家介绍@@eeor:

 

USE [Roomcharge-sys]
GO

/****** Object:  StoredProcedure [dbo].[PROC_StudentRegister]    Script Date: 06/21/2013 16:42:32 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:于亮		<Author,,Name>
-- Create date: 13,06,20<Create Date,,>
-- Description:	注册用于存储学生信息<Description,,>
-- =============================================
CREATE PROCEDURE[dbo].[PROC_StudentRegister]
	-- Add the parameters for the stored procedure here
	--参数
@studentID int,@studentName varchar(10),@StudentSex varchar(10),@Department varchar(10),
@grade varchar(10),@Class varchar(10),@UserID int,@CardID int,@Cash varchar(10),@Type varchar(10),@IsCheck varchar(10),
@RegDate varchar(10),@RegTime varchar(10)
AS
BEGIN
    --事物
    SET NOCOUNT ON;
    SET XACT_ABORT ON;
    BEGIN TRANSACTION  --开始事物
    
    --添加表
	insert into T_STUDENTINFO (StudentID,StudentName,StudentSex ,Department ,Grade ,Class,CardID ,UserID ) values (@StudentID,@StudentName,@StudentSex ,@Department ,@Grade ,@Class,@CardID,@UserID)
	insert into T_CARDINFO (CardID ,Cash ,Type ,regDate,RegTime,isCheck) values (@CardID ,@Cash ,@Type ,@regDate,@RegTime,@IsCheck)
	
	IF @@error<>0 --判断数据有没有错误
		BEGIN --有错误
			ROLLBACK TRAN --回滚事物
			commit tran --提交事物
		end
	else --没有错误
	commit tran --提交事物

END

GO

 

 

扫盲:

1.SET NOCOUNT

当 SET NOCOUNT 为 ON时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

2.SET XACT_ABORT

指定当 Transact-SQL语句出现运行时错误时,SQL Server 是否自动回滚到当前事务。

当 SET XACT_ABORT 为ON 时,如果执行 Transact-SQL 语句产生运行错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为OFF,也可能回滚整个事务。OFF 是默认设置。

分享到:
评论

相关推荐

    数据库函数、存储过程详解

    通过使用存储过程,开发者可以创建复杂的业务逻辑,比如事务处理、数据验证和错误处理。 在Sybase中,创建存储过程使用`CREATE PROCEDURE`语句,调用则通过`EXEC`命令。例如,以下是一个简单的存储过程示例,它接受...

    oracle 数据库 plsql 存储过程

    ### Oracle数据库PL/SQL存储过程详解 #### 一、存储过程概述 **Oracle存储过程**是一种可以在Oracle数据库中存储并可被多次调用的PL/SQL代码块。它由一系列的PL/SQL语句组成,可以包含控制流程、变量声明等,能够...

    mysql存储过程之错误处理实例详解

    本文实例讲述了mysql存储过程之错误处理。分享给大家供大家参考,具体如下: 当存储过程中发生错误时,重要的是适当处理它,例如:继续或退出当前代码块的执行,并发出有意义的错误消息。其中mysql提供了一种简单的...

    oracle数据库 存储过程

    ### Oracle数据库存储过程详解 在Oracle数据库中,存储过程是一种重要的数据库对象,它允许开发者将一组SQL语句和控制流程语句封装在一起,形成可重复使用的代码块。存储过程不仅提高了代码的重用性,还增强了数据...

    oracle存储过程详解-开发技术

    Oracle存储过程是提高数据库应用性能的重要工具之一,通过合理的设计和使用,不仅可以提升应用的响应速度,还能有效保护数据库的安全性和稳定性。了解其基本语法和常见问题,对于开发者来说至关重要。

    Mysql5存储过程中文详解

    5. **错误处理**:存储过程可以包含错误处理机制,使得错误处理更加集中和统一。 ### MySQL5.0中的新特性 MySQL5.0在存储过程方面引入了多项新特性: - **新的SQL语句**:包括DECLARE、BEGIN/END、IF/THEN/ELSE、...

    ORACLE实例与数据库详解.doc

    SGA 包括数据缓冲区、重做日志缓冲区、共享SQL区域等,这些内存区域用于存储和处理数据库数据。实例是临时性的,当Oracle服务停止时,实例及其内存结构也会消失。 2. **数据库**:数据库是物理存储在磁盘上的文件...

    删除数据库表中数据的存储过程.txt

    ### 删除数据库表中数据的存储过程 #### 概述 在数据库管理中,经常会遇到需要批量删除表中数据的情况。为了提高效率并确保安全性,通常会编写存储过程来执行这类操作。存储过程不仅可以减少网络流量,还能通过...

    INFORMIX存储过程手册

    SPL提供了丰富的控制结构和函数库,支持变量定义与赋值、流程控制(如IF条件判断、FOR循环、WHILE循环)、函数调用、错误处理等功能。具体而言: - **变量定义和赋值**:利用`DEFINE`和`LET`关键字来声明变量并赋值...

    Oracle 存储过程详解

    在实际应用中,存储过程常常与触发器、函数、包等其他数据库对象结合使用,以构建复杂的业务逻辑。例如,一个存储过程可能需要调用其他存储过程或函数,或者通过触发器自动执行某些操作。 在数据库优化方面,存储...

    oracle存储过程详解

    Oracle存储过程是一种数据库编程技术,它是PL/SQL(Oracle的编程语言)的集合,以命名的方式存储在数据库中。存储过程和函数有诸多优势,包括: 1. **集中管理**:存储过程和函数作为数据库对象存储,使得代码不...

    高级数据库课后习题答案详解

    10. 数据仓库与数据挖掘:数据仓库是为企业决策支持设计的集成数据库,而数据挖掘是从大量数据中发现模式和知识的过程。OLAP(在线分析处理)和ETL(提取、转换、加载)在数据仓库中起着关键作用。 通过学习和解答...

    MYSQL存储过程详解

    MySQL提供了强大的错误处理机制,可以通过定义错误处理器来捕获和处理存储过程中发生的异常情况。 #### 游标(Cursors) 游标允许存储过程逐行处理查询结果集。这对于需要逐行处理大量数据的应用场景非常有用。 ###...

    VC++ 数据库编程详解

    8. **错误处理和调试**:在编程过程中,学会识别和处理数据库操作中的错误,使用调试工具定位问题,是提高程序稳定性和可靠性的关键。 9. **数据绑定和控件**:MFC提供了数据绑定机制,可以使UI控件与数据库记录...

    Visual C++ 6.0数据库开发实例详解

    5. **数据库错误处理**:如何捕获和处理数据库操作中的异常,确保程序的稳定性和可靠性。 6. **用户界面集成**:结合CRecordView类,将数据库操作与用户界面元素(如控件和对话框)紧密结合,实现用户友好的数据库...

    oracle 存储过程批量提交

    ### Oracle存储过程批量提交知识点详解 在Oracle数据库中,存储过程是一种重要的数据库对象,它可以包含一系列SQL语句和控制流语句,用于实现复杂的业务逻辑处理。存储过程不仅可以提高应用程序性能,还可以确保...

    数据库备份与恢复的存储过程

    ### 数据库备份与恢复的存储过程详解 #### 一、背景介绍 在数据库管理中,数据的安全性至关重要。为了防止因各种原因导致的数据丢失或损坏,数据库备份与恢复技术成为了必不可少的一部分。本文将通过一段SQL ...

Global site tag (gtag.js) - Google Analytics