第8讲 存储过程
第8讲 存储过程
●题 要把某完成功能的SQL做成类似C语言 的函数,供需要时调用,如何做? ●什么是存储过程? 3是一组被编译在一起的TSQ语旬的集合, 它们被集合在一起以完成一个特定的任 概述 务, ●存储过程的分类 9系统存储过程 3扩展存储过程(提供从 SQL Server到外部 程序的接口,以便进行各种维护活动) 9用户自定义的存储过程
概 述 问题 要把某完成功能的SQL做成类似C语言 的函数,供需要时调用,如何做? 什么是存储过程? 是一组被编译在一起的T-SQL语句的集合, 它们被集合在一起以完成一个特定的任 务。 存储过程的分类 系统存储过程 扩展存储过程(提供从SQL Server到外部 程序的接口,以便进行各种维护活动) 用户自定义的存储过程
从以下几个方面考慮: 1.模块化编程 创建一个存储过程存放在数据库中后,就可 以被其他程序反复使用。 存储过程的作用 2.快速执行 存储过程第一次被执行后,就驻留在内存中。 以后执行就省去了重新分析、优化、编 译的过程 3.减少网络通信量 有了存储过程后,在网络上只要一条语句就 能执行一个存储过程。 安全机制 通过隔离和加密的方法提高了数据库的安全 性,通过授权可以让用户只能执行存储 过程而不能直接访问数据库对象
存 储 过 程 的 作 用 从以下几个方面考虑: 1. 模块化编程: 创建一个存储过程存放在数据库中后,就可 以被其他程序反复使用。 2. 快速执行: 存储过程第一次被执行后,就驻留在内存中。 以后执行就省去了重新分析、优化、编 译的过程。 3. 减少网络通信量 有了存储过程后,在网络上只要一条语句就 能执行一个存储过程。 4. 安全机制 通过隔离和加密的方法提高了数据库的安全 性,通过授权可以让用户只能执行存储 过程而不能直接访问数据库对象
视图 存储过程 存储过程和视图的比较 语句 只能是 SELECT可以包含程序流、 语句 逻辑以及 SELECT语句 输入、 不能接受参数,可以有输入输出 返回结果 只能返回结果集参数,也可以有 返回值 典型应用 多个表格的连接完成某个特定的 查询 较复杂的任务
存储过程和视图的比较 视图 存储过程 语句 只能是SELECT 语句 可以包含程序流、 逻辑以及 SELECT语句 输入、 返回结果 不能接受参数, 只能返回结果集 可以有输入输出 参数,也可以有 返回值 典型应用 多个表格的连接 查询 完成某个特定的 较复杂的任务
创°创建格式 建执 CREATE PROCEDURE proc name As Sql statements 过行 程简【间题】创建一个名为 p Student的 单 存储过程。返回 student.表中班级 的 编码为20000001的学生信息 存 储|。执行格式 EXEC proc name
创 建 、 执 行 简 单 的 存 储 过 程 创建格式: CREATE PROCEDURE proc_name AS Sql_statements 【问题】创建一个名为p_Student的 存储过程,返回student表中班级 编码为20000001的学生信息 执行格式: EXEC proc_name
创建一个名为 p StuByclass 的存储过程,返回“00电子 商务”班的所有学生的信息 练 习2执行该存储过程,外使用企 业管理器查看该存储过程的 定义
练 习 1 1. 创建一个名为p_StuByClass 的存储过程,返回“00电子 商务”班的所有学生的信息 2. 执行该存储过程,并使用企 业管理器查看该存储过程的 定义
创。创建格式 建带输 CREATE PROCEDURE proc name apara name datatype default] AS 过入 Sql statements 程参 数的存储 例】创建一个名为 Student para的存储过程.该 存储过程根据给定的班级编码显 示该班级所有学生的信息
创 建 带 输 入 参 数 的 存 储 过 程 创建格式: CREATE PROCEDURE proc_name @para_name datatype [=default], … AS Sql_statements 【例】创建一个名为 p_StudentPara的存储过程,该 存储过程根据给定的班级编码显 示该班级所有学生的信息
创建一个名为 p StuBy Para的 存储过程。根据给定的班级 编码和学生学号,显示相应 学生的信息 练 习
练 习 2 1. 创建一个名为p_StuByPara的 存储过程,根据给定的班级 编码和学生学号,显示相应 学生的信息
执。执行格式 行 EXEC proc name 带[@ para_name=]vale 输 过入指定参数名的格式 程参8不指定参数名的格式 数的存储 思考:当缺省参数执行存储过 程时,如何处理?
执 行 带 输 入 参 数 的 存 储 过 程 执行格式: EXEC proc_name [@para_name = ] value, … 指定参数名的格式 不指定参数名的格式 思考:当缺省参数执行存储过 程时,如何处理?
带·定义格式后上,同时指明 输 0UTPU关键字 ●创建、执行方法:P202-203 数【练习】创建存情过程P(C日3m 的 要求能根据用户给定的班级代码, 存 统计该班的人数,并将人数通过输 储 出变量返回给用户。 过如要查询班级代码为200 程 生人数。如何调用存储过程
带 输 出 参 数 的 存 储 过 程 定义格式同上,同时指明 OUTPUT关键字 创建、执行方法:P202-203 【练习】创建存储过程P_ClassNum, 要求能根据用户给定的班级代码, 统计该班的人数,并将人数通过输 出变量返回给用户。 如要查询班级代码为’20000002’的学 生人数,如何调用存储过程