《存储过程的应用.ppt》由会员分享,可在线阅读,更多相关《存储过程的应用.ppt(26页珍藏版)》请在三一办公上搜索。
1、第8章 存储过程的应用,技能目标,理解存储过程的作用;学会创建、删除、修改存储过程;学会根据实际需要设计销售管理数据库中的存储过程。,知识目标,理解存储过程的作用;了解系统存储过程和扩展存储过程;掌握存储过程的基本类型;掌握创建、删除、修改和加密存储过程;掌握执行各类存储过程,存储过程的概念,存储过程(Stored Procedure)是一组完成特定功能的Transact-SQL语句集,经编译后存储在数据库中,用户调用过程名和给出参数来调用它们,存储过程的特点,允许模块化程序设计执行速度快 有效降低网络流量 提高数据库的安全性,存储过程的分类,系统存储过程用户自定义存储过程扩展存储过程,存储过
2、程的分类(续),系统存储过程,存储过程的分类(续),用户自定义存储过程 用户自定义存储过程是指封装的由用户创建,能完成某一特定的功能的可重用代码的模块或例程。扩展存储过程 扩展存储过程是指使用编程语言(例如 C)创建自己的外部例程,是指 Microsoft SQL Server 的实例可以动态加载和运行的 DLL。,存储过程语法格式,语法格式:CREATE PROC|PROCEDURE 存储过程名 参数名称 参数数据类型=参数的默认值 OUTPUT,.n WITH ENCRYPTION WITH RECOMPILE AS sql_statement 参数:参数名称:存储过程可以没有参数。也可以
3、声明一个或多个参数,参数名称必须作为第一个字符。参数后面带OUTPUT,表示为输出参数。WITH ENCRYPTION:对存储过程加密,其他用户无法查看存储过程的定义。WITH RECOMPILE:每次执行该存储过程都重新进行编译。sql_statemen:该存储过程中定义的编程语句。,存储过程的组成,存储过程的定义中包含如下的两个主要组成部分。(1)过程名称及其参数的说明:包括所有的输入参数以及传给调用者的输出参数。(2)过程的主体:也称为过程体,针对数据库的操作语句(Transact-SQL 语句),包括调用其它存储过程的语句。,不带参数的存储过程,1、创建不带参数的存储过程 语法格式。C
4、REATE PROC|PROCEDURE 存储过程名 WITH ENCRYPTION WITH RECOMPILE AS sql_statement【例】创建一个名为Cu_information的存储过程,用于查询客户的信息。【例】创建一个名为Cu_tonghen_Order存储过程,用于查询“通恒机械有限公司”的联系人姓名、联系方式、以及该公司订购产品的明细表。,不带参数的存储过程(续),执行不带参数的存储过程 语法结构如下。EXECUTE 存储过程名【例9】执行创建的Cu_tonghen_Order存储过程。EXEC Cu_tonghen_Order,带输入参数的存储过程,创建带输入参数的
5、存储过程CREATE PROC|PROCEDURE 存储过程名 参数名称 参数数据类型=参数的默认值,.n WITH ENCRYPTION WITH RECOMPILE AS sql_statement【例】创建一个存储过程,实现根据订单号获取该订单的信息的功能。,带输入参数的存储过程(续),执行输入参数的存储过程两种方法:(1)使用参数名传递参数值执行的语法结构如下。EXEC 存储过程名 参数名=参数值 DEFAULT,n(2)按位置传递参数值EXEC 存储过程名 参数值1,参数值2,,带输出参数的存储过程,1、创建带输出参数的存储过程 语法如下。参数名 数据类型=默认值 OUTPUT2、执
6、行带输出参数的存储过程 语法如下。EXECUTE 存储过程名 参数名=参数值|变量 OUTPUT|默认值,.n,查看存储过程,(1)sp_help用于显示存储过程的参数及其数据类型。语法格式如下。sp_help objname=存储过程名(2)sp_helptext用于显示存储过程的源代码。语法格式如下。sp_helptext objname=存储过程,【例8.1】创建一个名为Cu_information的存储过程,用于查询客户的信息。代码如下:CREATE PROCEDURE Cu_information/*定义过程名*/ASSELECT*FROMcustomer/*过程体*/,SQL Se
7、rver 2005数据库应用技术 清华大学出版社,【例8.2】创建一个名为Cu_tonghen_Order存储过程,用于查询“通恒机械有限公司”的联系人姓名、联系方式、以及该公司订购产品的明细表。代码如下:CREATE PROCEDURE Cu_tonghen_OrderAsSELECT C.CompanyName 公司名称,c.con,P.productName 商品名称,P.price 单价,S.sellOrderNumber 订购数量,S.sellOrderDate 订货日期FROM customer AS C JOIN Sell_order AS S ON C.customerID=S
8、.customerID JOIN product AS P ON P.productID=S.productID where C.CompanyName=通恒机械有限公司,【例8.3】执行【例8.2】中创建的Cu_tonghen_Order存储过程。代码如下:EXEC Cu_tonghen_Order,【例8.4】创建一个存储过程,实现根据订单号获取该订单的信息的功能。代码如下:Create PROCEDURE OrderDetailOrderID INTASSELECT*FROM Sell_Order WHERE SellOrderId=OrderID,【例8.5】在销售管理数据库Compa
9、nySales中,创建一个名customer_order存储过程,用于获取指定客户的信息,包括联系人姓名、联系方式以及该公司订购产品的明细表。代码如下:CREATE PROCEDURE customer_ordercustomername varchar(20)ASSELECT c.CompanyName 公司名称,C.contactName 联系人姓名,P.productName 商品名称,P.Price 单价,S.sellOrderNumber 数量,S.SellOrderDATE 订货日期FROM customer AS C JOIN Sell_order AS S ON C.custo
10、merID=S.customerID JOIN product AS P ON S.productID=P.productID WHERE c.CompanyName=customername,【例8.6】创建名为listEmployee的存储过程,其功能为:在员工表employee中查找符合性别和超过指定工资条件的员工详细信息。代码如下:CREATE PROCEDURE listEmployeesex varchar(2),salary moneyASSELECT*FROM employee WHERE sex=sex and salarysalary查找工资超过4000元的的男员工和工资超
11、过3000元女员工的详细信息。代码如下:EXEC listEmployee sex=男,salary=4000EXEC listEmployee salary=3500,sex=女,删除用户存储过程,删除用户存储过程可以使用DROP命令。语法格式如下。DROP PROC|PROCEDURE 存储过程名,.n,修改存储过程,ALTER PROCEDURE语句的语法格式如下。ALTER PROC|PROCEDURE 存储过程名 参数名称 参数数据类型=参数的默认值 OUTPUT,.n WITH ENCRYPTION WITH RECOMPILE AS sql_statement,系统存储过程,常用
12、系统存储过程:sp_tables:返回可在当前环境中查询的对象列表。这代表可在 FROM 子句中出现的任何对象。sp_stored_procedures:返回当前环境中的存储过程列表。sp_rename:在当前数据库中更改用户创建对象的名称。此对象可以是表、索引、列、别名数据类型。sp_renamedb:更改数据库的名称。sp_help:报告有关数据库对象(sys.sysobjects 兼容视图中列出的所有对象)、用户定义数据类型或 SQL Server 2005 提供的数据类型的信息。sp_helptext:示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)。sp_who:提供有关 Microsoft SQL Server Database Engine 实例中的当前用户和进程的信息。sp_password:为 Microsoft SQL Server 登录名添加或更改密码。,创建存储过程需要考虑的因素:,(1)一个存储过程完成一个任务。(2)不要使用sp_来命名用户存储过程。(3)可以使用WITH ENCRYPTION加密存储过程,以免存储过程的源代码被人查阅。(4)在存储过程的开始执行SET语句。(5)在服务器上创建、测试存储过程。,