2024年3月9日发(作者:)

如何在存储过程中定义并生成提示消息

一、引言

存储过程是数据库系统的重要对象,通过存储过程的设计与

使用,可减少程序代码的编写,提高程序的可读性,使用存储过

程的消息处理机制,可及时发现数据库系统运行过程中的问题,

本文从存储过程的设计和应用角度,讨论如何在存储过程中定义

并生成提示消息。

二、提示消息的定义与生成

在数据库管理系统中,提示消息可通过Return语句、ERROR

变量、SP_addmessage和Raiserror语句四种方法实现。下面基

于Microsfot SQL Server 2005数据库系统,在studb数据库中

定义存储过程,阐述提示消息的定义与生成方法。数据表、属性

定义如下。

(一)Return语句

功能:无条件退出,不执行Return后续语句,并返回整型

值,语法如下:

Return [integer_expression]

注:integer_expression:返回的整型值。

(二)ERROR

功能:用于返回系统最近一次执行T-SQL语句的状态,语句

执行成功,返回0,否则返回非0值。

(三)sp_addmessage

功能:定制自定义存储过程的提示消息,定义的提示消息将

被添加到master数据库的es视图中,语法如下:

SP_addmessage [ msgnum =] msg_id , [ severity = ]

severity , [ msgtext = ] 'msg' [ , [ lang = ] 'language' ]

[ , [ with_log = ] 'with_log' ] [ , [ replace = ] 'replace' ]

[msgnum =]msg_id:提示消息的ID号,该值应大于50000,

默认值为 NULL。

[severity =]severity:严重级别,共25级, 1~18为一

般性错误级别,19~25为严重错误级别。

[msgtext =]'msg':提示消息文本。

[lang =]'language':提示消息的语言种类,默认为

english。

[with_log =]'with_log':是否写入Windows 应用程序日

志,取值为true或false。

[replace =]'replace':如指定该参数,则新消息文本将自

动替换ID号相同的消息文本。

(四)Raiserror语句

功能:用于生成提示消息,并启动会话处理。

语法如下:

Raiserror ({ msg_id | msg_str }{ ,severity ,state })

msg_id:提示消息ID号。

msg_str:提示消息文本。

severity:严重级别。

State:状态信息,默认值为1。

(五)综合应用

编写存储过程s_year,要求输入学生学号,输出学生年龄,

并对学号为空(NULL)和学号不存在的情况给出提示消息。

USE studb

GO

IF OBJECT_ID ('s_year', 'P' ) IS NOT NULL

DROP PROC s_year

GO

EXEC SP_addmessage 50010,10,'学号不能为空!

','english','true','replace'

EXEC SP_addmessage 50011,10,'学号不存在!

','english','true','replace'

GO

CREATE PROC s_year s_no varchar(40),year int OUTPUT

AS

IF s_no IS NULL

BEGIN

RAISERROR(50010,10,1)

RETURN

END

IF NOT EXISTS(SELECT * FROM student WHERE s_no=s_no)

BEGIN

RAISERROR(50011,10,1)

RETURN

END

IF EXISTS(SELECT * FROM student WHERE s_no=s_no)

SELECT year=year(getdate())-year(s_b) from student

WHERE s_no=s_no

GO

执行:

DECLARE s_year int

EXEC s_year NULL, s_year OUTPUT

SELECT s_year

DECLARE s_year FLOAT

EXEC s_year '20071111', s_year OUTPUT

SELECT s_year

注:输入学号不存在,显示“学号不存在!”。

declare s_year float

EXEC s_year '20070002', s_year OUTPUT

SELECT s_year,error

注:输入学号正确,显示学生的年龄和error变量值。

三、结束语

存储过程在数据库系统维护中得到广泛应用,合理的定义并

生成定制的提示消息,有助于提高数据库系统的维护效率。