博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关系数据库SQL之可编程性存储过程
阅读量:7210 次
发布时间:2019-06-29

本文共 2035 字,大约阅读时间需要 6 分钟。

前言

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

图片来自网络

概述

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

语法


创建存储过程

--创建存储过程CREATE PROC[EDURE] 
<存储过程名称>
-- 添加存储过程所需的参数 [ <@参数1>
<参数类型1>
[= 默认值] [OUTPUT], …… <@参数n>
<参数类型n>
[= 默认值] [IN|OUT|OUTPUT] ]ASBEGIN -- 这里面可以写为变量赋值语句 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_getTransMoneygo--创建无参数存储过程create proc proc_getTransMoneyasbegin    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))endgo--执行存储过程exec proc_getTransMoneygo/** 查询指定账户挂失的账户信息*/--判断存储过程是否存在--存在则删除if exists(select * from sysobjects where name = 'proc_getLostAccount')drop procedure proc_getLostAccountgo--创建带参数输出存储过程create proc proc_getLostAccount--@CId varchar(20) OUTPUTasbegin    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 = '是'endgo--执行存储过程declare @CardID  varchar(20);set @CardID= '银行卡号';exec proc_getLostAccount  @CardID output;print @CardID;go

*本文就介绍到这里。

如有疑问请联系我。*

原文来自:

转载地址:http://ucgum.baihongyu.com/

你可能感兴趣的文章
PG,PL,SE,PM都是什么意思,职责划分
查看>>
MyEclipse8.6安装svn(非link方式)
查看>>
SecureCRT恢复默认字体
查看>>
Ubuntu下安装、卸载notepad++
查看>>
Windows Azure上的Odoo(OpenERP)-1.创建Ubuntu虚拟机,安装PostgreSQL 数据库
查看>>
C# 网卡IP(网上资料整理)
查看>>
html网站网址一键打包成App平台-开心App平台
查看>>
使用react的一点提醒17/10/26
查看>>
Java 内部类的阐述
查看>>
redis-大key寻找
查看>>
EF 数据查询(更改默认排序)
查看>>
求连续子数组的最大和
查看>>
SpringMVC最简单配置应用
查看>>
jQuery与Zepto的异同
查看>>
jsp注册页面的省份联动(网上copy别人的,然后自己弄了一下才知道怎么用)
查看>>
CRC检错技术原理
查看>>
读取Ini文件字段
查看>>
asp获取来源Url
查看>>
第一次实验
查看>>
Redis基础操作
查看>>