如何使用 sql 存储过程简化复杂的操作(sql怎么使用存储过程)_1

本文主要介绍如何使用sql存储过程简化复杂操作(如何使用sql存储过程),下面一起看看如何使用sql存储过程简化复杂操作(如何使用sql存储过程)相关资讯。
内容1。存储过程2。为什么使用存储过程3。执行存储过程4。创建存储过程5。摘要本文介绍了什么是sql存储过程,为什么使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。
一、存储过程到目前为止,我们使用的大多数sql语句都是针对一个或多个表的单语句。并不是所有的操作都这么简单,经常会有一些复杂的操作需要多条语句才能完成,比如下面这种情况。
为了处理订单,必须进行检查以确保库存中有相应的商品。如果物品有货,需要预留,不会卖给别人,减少物品数据,以反映正确的库存。没有库存的项目需要订购,这需要与供应商进行一些互动。关于哪些物品入库(并且可以立即发货),哪些物品退订,需要通知相应的客户。这显然不是一个完整的例子,它甚至超出了本文的范围,但它足以表达我们的意思。执行这个过程需要对许多表使用多个sql语句。
此外,要执行的具体sql语句及其顺序并不固定,它们可能会根据物品是否在库存中而变化。
那么,如何写代码呢?您可以单独编写每个sql语句,并根据结果有条件地执行其他语句。每次需要这个过程时(以及每个需要它的应用程序),都必须完成这些任务。
您可以创建存储过程。简单地说,存储过程是一个或多个保存起来供以后使用的sql语句。它们可以被视为批处理文件,尽管它们的功能并不仅限于批处理。
描述:不适用于sqlite。
sqlite不支持存储过程。
说明:还有。
存储过程非常复杂,全面介绍需要很大篇幅。
市场上有专门介绍存储过程的书籍。
本文不打算解释存储过程的全部内容,只是简单介绍一下,让读者了解一下它们的功能。
因此,这里给出的例子只提供了oracle和sql server的语法。
第二,为什么要使用存储过程?我们知道什么是存储过程,那么为什么要使用它们呢?原因有很多。以下是一些主要的。
通过将处理封装在一个易于使用的单元中,可以简化复杂的操作(如前面的示例所述)。由于不需要重复建立一系列的处理步骤,保证了数据的一致性。如果所有开发人员和应用程序使用相同的存储过程,则使用的代码是相同的。上一点的延伸是为了防止出错。需要执行的步骤越多,出错的可能性就越大。防止错误确保了数据的一致性。简化变更管理。如果表名、列名或业务逻辑(或其他内容)发生变化,那么只需更改存储过程的代码。使用它的人不会。;我甚至不需要知道这些变化。上一点的延伸就是安全性。对基础数据的访问受到存储过程的限制,减少了数据损坏(无意识或其他原因造成的数据损坏)的几率。因为存储过程通常以编译的形式存储,所以dbms处理命令的工作量减少了,性能也提高了。有一些sql元素和特性只能在单个请求中使用,存储过程可以使用它们来编写更强大、更灵活的代码。换句话说,使用存储过程有三个主要好处,即简单性、安全性和高性能。显然,它们都很重要。但是,在将sql代码转换成存储过程之前,您还必须了解它的一些缺点。
不同dbms中存储过程的语法是不同的。事实上,要编写一个真正可移植的存储过程几乎是不可能的。
然而,存储过程的自调用(名称和数据传递)可以保持相对的可移植性。
所以如果需要移植到另一个dbms上,至少客户端应用程序代码不需要改动。
一般来说,编写存储过程比编写基本的sql语句更复杂,需要更高的技能和更丰富的经验。
因此,许多数据库管理员将限制存储过程的创建作为一种安全措施(主要受前面缺陷的影响)。
尽管有这些缺点,存储过程还是非常有用的,应该使用。事实上,大多数dbms都有各种用于管理数据库和表的存储过程。有关更多信息,请参见特定的dbms文档。
描述:can 不写存储过程?你仍然可以使用它。
大多数dbms将编写存储过程所需的安全性和访问权限与执行存储过程所需的安全性和访问权限区分开来。
这是一件好事,即使你可以 t(或don 我不想)编写自己的存储过程,但是您仍然可以在适当的时候执行其他存储过程。
三、执行存储过程存储过程的执行比编写要频繁得多,所以让 让我们首先介绍存储过程的执行。
执行存储过程的sql语句很简单,即execute。
execute接受存储过程名和任何需要传递给它的参数。
看看下面的例子(你可以 因为存储过程addnewproduct不支持。;尚不存在):
执行add new product( ;jts01 , 填充埃菲尔铁塔和。;,6.49, 长毛绒玩具的文字拉图尔埃菲尔铁塔在红色白色和蓝色 );这里,执行一个名为addnewproduct的存储过程,向products表中添加一个新产品。
addnewproduct有四个参数。,即:供应商id(供应商表的主键)、产品名称、价格和描述。
这四个参数匹配存储过程中的四个预期变量(定义为存储过程本身的组件)。此存储过程向products表中添加一个新行,并将传入的属性分配给相应的列。
我们注意到在products表中有另一个列prod_id需要一个值,它是这个表的主键。
为什么这个值没有作为属性传递给存储过程?为了确保正确生成这个id,最好自动生成这个id(而不是依赖终端用户的输入)。
这就是这个例子使用存储过程的原因。这里 存储过程的作用是:
验证传递的数据,确保四个参数都有值;生成一个用作主键的唯一id;将新产品插入到products表中,并将生成的主键和传递的数据存储在适当的列中。这是存储过程执行的基本形式。对于特定的dbms,可能包括以下执行选项。
参数是可选的,并且在没有提供参数时具有默认值。参数没有按顺序给出,参数值以 参数=值 。输出参数,允许存储过程更新正在执行的应用程序中使用的参数。用select语句检索数据。允许存储过程向正在执行的应用程序返回值的返回代码。四、创建存储过程如前所述,存储过程的编写非常重要。为了获得感性认识,让 让我们看一个简单的存储过程的例子,它计算邮件列表中有电子邮件地址的客户。
以下是该流程的oracle版本:
create procedure mailing list count(list count out integer)isv _ rows integer;从not cust_email为空的客户开始选择count(*)到v _ rowslist count : = v _ rows;结束;这个存储过程有一个名为listcount的参数。此参数从存储过程返回值,而不是将值传递给存储过程。
关键字out用于表示这种行为。oracle支持in(向存储过程传递值)、out(从存储过程返回值,如此处所示)和inout(向存储过程传递值和从存储过程返回值)类型的参数。
存储过程的代码包含在begin和end语句中,其中执行了一个简单的select语句,该语句检索带有电子邮件地址的客户。然后用检索到的行数设置listcount(要传递)。输出参数)。
调用oracle示例如下:
var return value number exec mailing list count(: return value);选择returnvalue这段代码声明一个变量来保存存储过程返回的任何值,然后执行存储过程,再用select语句显示返回值。
以下是此过程的sql server版本。
create procedure mailinglistcountasdeclare @ cnt integer select @ cnt = count(*)from customers where not cust _ email为空;return @ cnt此存储过程没有参数。调用程序检索sql server返回代码提供的值。
其中,一个名为@cnt的局部变量是用declare语句声明的(sql server中所有的局部变量名称都是以@开头的);
然后在select语句中使用这个变量来包含count函数返回的值;最后,使用return @cnt语句将计数返回给调用程序。
调用sql server示例如下:
declare @ return value in execute @ return value = mailing list count;select @ returnvalue这段代码声明一个变量来保存存储过程返回的任何值,然后执行存储过程,再用select语句显示返回值。
下面是另一个例子,这次是在orders表中插入一个新订单。这个程序只适用于sql server,但是它说明了存储过程的一些用途和技术:
create procedure new order @ cust _ id char(10)as-声明变量declare @order_num integer -对于订单号-获取当前最大订单号select @order_num=max(order_num)。从订单-确定下一个订单编号select @ order _ num = @ order _ num 1-将新订单插入orders (order _ num,order _ date,cust _ id)值(@ order _ num,getdate,@ c。ust _ id)-返回订单号return @ order _ num此存储过程在orders表中创建新订单。
它只有一个参数,即下订单的客户的id。订单号和订单日期在存储过程中自动生成。
代码首先声明一个局部变量来存储订单号。接下来,检索当前的最大订单号(使用max函数)并将其增加1(使用select语句)。
然后使用insert语句插入一个由新生成的订单号、当前系统日期(由getdate函数检索)和传递的客户id组成的订单。
最后,使用return @order_num返回订单号(需要它来处理订购的商品)。
请注意这段代码是注释的,在编写存储过程时应该添加更多的注释。
描述:注释代码
所有代码都应该被注释,存储过程也不例外。添加注释不影响性能,所以没有缺陷(除了增加写时间)。
注释代码有很多好处,包括让别人(和你自己)更容易理解和更安全地修改代码。
注释代码的标准是在代码前面加上-(两个连字符)。
有些dbms还支持其他注释语法,但所有dbms都支持-,所以在注释代码时最好使用这种语法。
以下是同一sql server代码的一个非常不同的版本:
create procedure new order @ cust _ id char(10)as-insert new order insert into orders(cust _ id)values(@ cust _ id)-return order num select order _ num = @ @ identity;此存储过程还在orders表中创建新订单。这一次,dbms生成订单号。
大多数数据库管理系统支持这一功能;在sql server中,这些自动递增的列称为标识字段,而在其他dbms中,它们称为自动编号或序列。
传递给该流程的参数也是一个,即下订单的客户id。
没有给出订单编号和订单日期,dbms使用默认值(getdate函数)作为日期,订单编号是自动生成的。
如何获取这个自动生成的id?在sql server上,可以在全局变量@@identity中获得,该变量返回到调用程序(这里使用select语句)。
正如您所看到的,在存储过程的帮助下,有许多方法可以完成同样的工作。然而,所选择的方法受到所使用的dbms的特性的限制。
五.总结书本文介绍了什么是存储过程以及为什么使用存储过程。我们介绍了执行和创建存储过程的语法,以及使用存储过程的一些方法。
存储过程是一个非常重要的主题,一篇文章不可能涵盖所有内容。
各种dbms有不同的存储过程实现。您使用的dbms可能会提供这里提到的一些功能,但还有其他功能没有提到。有关更详细的介绍,请参考特定的dbms文档。
原文链接: -stored-procedures/
(完)
标签:
存储过程语句
了解更多如何使用sql存储过程简化复杂操作(如何使用sql存储过程)相关内容请关注本站点。

4g卡能用5G手机吗(4g卡能用5g手机吗 速度怎么样)
win10企业版系统怎么转换为专业版的(win10企业版怎么转换成专业版)
内置手机电池怎么更换,oppo怎样换电池视频
6s的照片导入11(怎么把6s手机里照片全部导入到电脑)
2021年2000左右的手机推荐哪个比较好(2021年2000元左右的手机哪款性价比最高)
如何使用 sql 存储过程简化复杂的操作(sql怎么使用存储过程)_1
windows替换苹方字体(win10更换字体为苹果字体)
充电宝归还了为什么还显示在使用怎么办(充电宝归还了为什么还显示在使用是不是还继续扣费着)
路由器的基本技术与协议是什么(路由器的基本技术与协议的关系)
ps没有字体怎么改字体颜色(ps字体怎么改变)
水维修电话是多少,您好天津塘沽的自来水公司的维修电话是多少
电脑主机一般多少瓦,电脑一般多少瓦
密室逃脱18红蓝黄的转盘(密室逃脱18旋转红黄蓝)
电脑桌面背景图片唯美清新(电脑桌面背景可爱高清)
华硕电脑官方客服热线号码,ASUS客服
显卡安装后显示器不显示,显卡风扇会转就是屏幕不亮
抖音随拍是什么标签(抖音随拍是什么类型)
win 10笔记本怎么开启麦克风(笔记本windows10麦克风没声音怎么设置)
win7任务栏怎么透明度(windows7任务栏怎么透明)
微信uwp与微信forwindows区别(wxfor和wxkey是什么用)