关系数据库SQL之可编程性存储过程

前言

前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数,本文来介绍一下存储过程的创建、执行、删除。(还是以前文中银行系统为例)

图片来自网络

概述

存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数(如果该存储过程带有参数)来执行。

语法


创建存储过程

--创建存储过程
CREATE PROC[EDURE] <存储过程名称> 
    -- 添加存储过程所需的参数
    [
     <@参数1> <参数类型1> [= 默认值] [OUTPUT], 
     ……
     <@参数n> <参数类型n> [= 默认值] [IN|OUT|OUTPUT]
    ]
AS
BEGIN
    -- 这里面可以写为变量赋值语句
    SQL语句块
END

注意

  1. 其中存储过程名不能超过128个字,每个存储过程中最多设定1024个参数;
  2. 存储过程所需的参数可有可无,如果有参数为带参数存储过程,没有参数就是无参数存储过程;
  3. 带参数存储过程参数后面有关键字OUT|OUTPUT为带输出参数存储过程;

[IN|OUT|OUTPUT]介绍

  • IN:在参数后面加了IN关键字的表示为输入参数,默认的情况就是输入参数;
  • OUT:在参数后面加了OUT关键字的表示为输出参数;
  • OUTPUT:在参数后面加了OUTPUT关键字表示为输入输出参数,既是传入参数也是输出参数。

调用存储过程

--调用存储过程
EXEC<存储过程名称> [参数列表]

删除存储过程

--删除存储过程
DROP PROC[EDURE] <存储过程名称>

示例

/*
* 查询交易信息表中总的交易金额,以及支取和存入的总金额,并打印出来
*/
--判断存储过程是否存在
--存在则删除
if exists(select * from sysobjects where name = 'proc_getTransMoney')
drop procedure proc_getTransMoney
go
--创建无参数存储过程
create proc proc_getTransMoney
as
begin
    declare @sum_money money        --交易总额
    declare @get_money money        --支出总额
    declare @sav_money money        --存入总额
    select @sum_money = sum(TransMoney) from TransInfo
    select @get_money = sum(TransMoney) from TransInfo where TransType = '存款'
    select @sav_money = sum(TransMoney) from TransInfo where TransType = '取款'
    print '交易总额='+ltrim(convert(char,@sum_money))
    print '存入总额='+ltrim(convert(char,@sav_money))
    print '支出总额='+ltrim(convert(char,@get_money))
end
go
--执行存储过程
exec proc_getTransMoney
go

/*
* 查询指定账户挂失的账户信息
*/
--判断存储过程是否存在
--存在则删除
if exists(select * from sysobjects where name = 'proc_getLostAccount')
drop procedure proc_getLostAccount
go
--创建带参数输出存储过程
create proc proc_getLostAccount
--
@CId varchar(20) OUTPUT
as
begin
    select A.CustName as 姓名, A.IDCard AS 身份证号, A.TelePhone as 电话号码,
    C.CardID as 银行卡号,A.Address as 地址
    from AccountInfo as A inner join CardInfo as C on A.CustID = C.CustID
    where C.CardID =@CId AND C.IsLost = '是'
end
go
--执行存储过程
declare @CardID  varchar(20);
set @CardID= '银行卡号';
exec proc_getLostAccount  @CardID output;
print @CardID;
go

本文就介绍到这里。
如有疑问请联系我。

本文采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
基于简书上的作品创作。 可转载、引用,但需经本人同意后署名作者且注明文章出处,并以相同方式共享。

知识共享许可协议
知识共享许可协议

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容