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变量值。
三、结束语
存储过程在数据库系统维护中得到广泛应用,合理的定义并
生成定制的提示消息,有助于提高数据库系统的维护效率。
发布评论