第8章存储过程课件

合集下载

所有分类存储过程与触发器课件PPT教学

所有分类存储过程与触发器课件PPT教学

GO
第30页/共121页
8.3 执行存储过程
1.通过Execute或Exec语句执行
EXECUTE语句用于执行存储在服务器上的存储过程,也可以简写成EXEC语 句。
第31页/共121页
语法:
[[EXEC[UTE]] {[@return_status=] {procedure_name|@procedure_name_var}
@firstname = 'Ann' 或者 EXECUTE(EXEC) GetEmployees @firstname = 'Ann',
@lastname = 'Dull'
[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}[,...n]]}]
第32页/共121页
其中,各选项的含义如下: EXECUTE:执行存储过程的命令关键字。 @return_status:是一个可选的整型变量,保存存储过程的返回状态。 procedure_name:指定执行的存储过程的名称。 @procedure_name_var:是局部定义变量名,代表存储过程名称。 @parameter:是在创建存储过程时定义的过程参数。
第10页/共121页
8.2.1 使用企业管理器创建存储 过 程 【例8-1】 创建存储过程。
在SQL Server管理控制台中,选择指定的服务器和数据库,展开数据库中的“可编程性”文件夹,右 击其中的“存储过程”,在弹出的快捷菜单中选择“新建存储过程…”选项。
第11页/共121页
图8.1 用对象资源管理器创建存储过程
第2页/建存储过程 8.3 执行存储过程 8.4 查看和修改存储过程 8.5 删除存储过程 8.6 触发器简介 8.7 创建触发器 8.8 修改触发器 8.9 删除触发器

第8讲存储过程PPT课件

第8讲存储过程PPT课件


删除格式:
DROP PROCEDURE proc_name
第12页/共14页
R E C O M PI L E

• 在创建时指明重编译 • 在执行时指明重编译 • 通过系统存储过程设定重编译选项
(理处译编重
第13页/共14页
程过储存展扩程过储存统系
• sp_addlog——创建登录ID

• 问题:为何执行该存储过程时可以带一个、两个或者三个参数?
第9页/共14页
【练习】创建存储过程Cou_credit,要求能根据用户给定的学分 值,统计满足该学分值的课程数目,并把它返回给调用程序。
如要统计2个学分的课程门数,该如何调用上述存储过程。
【练习】创建名为mod_credit的存储过程,能修改用户指定课程 号的课程学分值,修改值也由用户指定。
第10页/共14页
• 修改格式:
程过储存改修
ALTER PROCEDURE proc_name
@para_name datatype [=default], …
[WITH ENCRYPTION]
AS
Sql_statements
第11页/共14页

重命名:
使用企业管理器
程过储存除删名命重 、
• 注意:要修改两个地方
视图存储过程语句只能是select语句可以包含程序流逻辑以及select语句输入返回结果不能接受参数只能返回结果集可以有输入输出参数也可以有返回值典型应用多个表格的连接查询完成某个特定的较复杂的任务创建格式
• 问题 述 概 要把某完成功能的SQL做成类似C 语言的函数,供需要时调用,如何 做?
• 什么是存储过程?
• 是一组被编译在一起的T-SQL语句的集 合,它们被集合在一起以完成一个特定 的任务。

存储过程.ppt

存储过程.ppt

存储过程相 当于C语言 中的函数
int sum(int a,int b) {
int s; s =a+b; return s ; }
什么是存储过程
存储过程可以包含数据操纵语句、变量、逻辑 控制语句等
存储过程
----------------------
单个 SELECT 语句 SELECT 语句块
可以包含
FROM Students INNER JOIN Student_course ON
优秀的学
Students.Student_id=Student_course.Student_id
生信息
WHERE Student_grade>=85
GO
调用存储过程
EXECUTE(执行)语句用来调用存储过程 调用的语法
常用的系统存储过程
系统存储过程 sp_databases sp_helpdb sp_renamedb sp_tables sp_columns sp_help sp_helpconstraint sp_helpindex sp_stored_procedures sp_password sp_helptext
创建文件夹D:\bank
EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT
IF EXISTS(SELECT * FROM sysdatabases
WHERE name='bankDB')
DROP DATABASE bankDB
GO
CREATE DATABASE bankDB
返回某个表列的信息
EXEC sp_help Students 查看表stuInfo的信息

MySQL数据库基础与实例教程第8章

MySQL数据库基础与实例教程第8章

8.3 游标
8.1.6 存储过程与函数的比较
存储过程与函数之间的不同之处在于: 函数必须有且仅有一个返回值,且必须指定 返回值数据类型(返回值类型目前仅仅支持字符 串、数值类型)。存储过程可以没有返回值,也 可以有返回值,甚至可以有多个返回值,所有的 返回值需要使用out或者inout参数定义。
8.1.6 存储过程与函数的比较
MySQL数据库基础与实例教程

存储过程与游标
肖红
内容一览
本章主要讲解如何 在MySQL中使用存 储过程,并结合 “选课系统”讲解 存储过程在该系统 中的应用,最后本 章对存储程序做了 总结。
1 存储过程 2 错误触发条件和错误处理 3 游标
4 预处理SQL语句
5 存储程序的说明
8.1 存储过程
8.1.6 存储过程与函数的比较
存储过程与函数之间的不同之处在于: 函数中的函数体限制比较多,比如函数体内 不能使用以显式或隐式方式打开、开始或结束事 务的语句,如start transaction、commit、 rollback或者set autocommit=0等语句;不能在 函数体内使用预处理SQL语句(稍后讲解)。存 储过程的限制相对就比较少,基本上所有的SQL 语句或MySQL命令都可以在存储过程中使用。
inout代表即是输入参数,又是输出参数, 表示该参数的值即可以由调用程序指定,又 可以将inout参数的计算结果返回给调用程序。
8.1.1 创建存储过程的语法格式
例如下面的存储过程:
delimiter $$ create procedure get_choose_number_proc(in student_no1 int,out choose_number int) reads sql data begin select count(*) into choose_number from choose where student_no=student_no1; end $$ delimiter ;

SQL Server 2005数据库简明教程-第8章 存储过程的操作与管理

SQL Server 2005数据库简明教程-第8章 存储过程的操作与管理

图8-3 查看存储过程
8.2.1 查看存储过程
(2)使用系统存储过程来查看用户创建的存储过程 。
可供使用的系统存储过程及其语法形式如下: •sp_help,用于显示存储过程的参数及其数据类型,其语法为: sp_help [[@objname=] name],参数name为要查看的存储过程的名称。 •sp_helptext,用于显示存储过程的源代码,其语法为: sp_helptext [[@objname=] name],参数name为要查看的存储过程的名称。 •sp_depends,用于显示和存储过程相关的数据库对象,其语法为: sp_depends [@objname=]’object’,参数object为要查看依赖关系的存储过程 的名称。 •sp_stored_procedures,用于返回当前数据库中的存储过程列表,其语法为: sp_stored_procedures[[@sp_name=]'name'] [,[@sp_owner=]'owner'] [,[@sp_qualifier =] 'qualifier'] 其中,[@sp_name =] 'name' 用于指定返回目录信息的过程名;[@sp_owner =] 'owner' 用于指定过程所有者的名称;[@qualifier =] 'qualifier' 用于指定过程 限定符的名称。
8.2查看、修改和删除存储过程
8.2.1 查看存储过程 8.2.2 修改存储过程
8.2.3 重命名和删除存储过程
8.2.1 查看存储过程
(1)使用SQL Server管理平台查看用户创建的存储过程。 在SQL Server管理平台中,展开指定的服务器和数据库,选择并依次展开“程序→存储 过程”,然后右击要查看的存储过程名称,如图8-3所示,从弹出的快捷菜单中,选择 “创建存储过程脚本为→CREATE到→新查询编辑器窗口”,则可以看到存储过程的源 代码。

SQL Server 2005数据库原理及应用教程第8章 存储过程和触发器

SQL Server 2005数据库原理及应用教程第8章 存储过程和触发器

2.相关注意事项 ①不能将 CREATE PROCEDURE语句与其他 SQL 语句组合 PROCEDURE语句与其他 到单个批处理中。 ②创建存储过程的权限默认属于数据库所有者,该所有者可将 此权限授予其他用户。 ③存储过程是数据库对象,名称必须遵守标识符规则。 ④只能在当前数据库中创建存储过程。 ⑤一个存储过程的最大尺寸为128M。 ⑤一个存储过程的最大尺寸为128M。 ⑥可以在存储过程内引用临时表。 ⑦如果执行的存储过程调用另一个存储过程,则被调的存储过 程可以访问由第一个存储过程创建的包括临时表在内的所有 对象。 ⑧存储过程中参数的最大数量为2100。 ⑧存储过程中参数的最大数量为2100。 ⑨不要以sp_为前缀创建任何存储过程。 ⑨不要以sp_为前缀创建任何存储过程。
1.语法格式 创建存储过程的语法格式: CREATE PROC[EDURE] procedure_name[;number] [{@parameterdata_type} [VARYING][=default][OUTPUT] ][,...n] WITH AS sql_statement [ ...n ] ①procedure_name:用于指定要创建的存储过程的名称。 procedure_name:用于指定要创建的存储过程的名称。 ②number:该参数是可选的整数,它用来对同名的存储过程分组,以便用 number:该参数是可选的整数,它用来对同名的存储过程分组,以便用 一条 DROP PROCEDURE 语句即可将同组的过程一起除去。 ③@parameter:过程中的参数,在 CREATE PROCEDURE 语句中可以 @parameter:过程中的参数,在 声明一个或多个参数。 ④data_type:用于指定参数的数据类型。 data_type:用于指定参数的数据类型。 ⑤VARYING:用于指定作为输出OUTPUT参数支持的结果集。 VARYING:用于指定作为输出OUTPUT参数支持的结果集。 ⑥DEFAULT:用于指定参数的默认值。 DEFAULT:用于指定参数的默认值。 ⑦OUTPUT:表明该参数是一个返回参数。 OUTPUT:表明该参数是一个返回参数。 ⑧AS:用于指定该存储过程要执行的操作。 AS:用于指定该存储过程要执行的操作。 ⑨sql_statement:是存储过程中要包含的任意数目和类型的 Transactsql_statement:是存储过程中要包含的任意数目和类型的 TransactSQL 语句。

厦门大学-林子雨-数据库系统原理2016版-第8章-数据库编程ppt

厦门大学-林子雨-数据库系统原理2016版-第8章-数据库编程ppt

2. 主变量
主语言向SQL语句提供参数 将SQL语句查询数据库的结果交主语言进一步处理

3. 游标
解决集合性操作语言与过程性操作语言的不匹配
《数据库系统原理》
厦门大学计算机系
林子雨
ziyulin@
2016版
一、SQL通信区
SQLCA: SQL Communication Area
厦门大学计算机系
林子雨
ziyulin@
2016版
C语言编写嵌入式SQL实例(5)
《数据库系统原理》
厦门大学计算机系
林子雨
ziyulin@
2016版
六、编译运行C程序 嵌入SQL的C应用程序具体到VC++6.0、 SQL Server2000下调试可分为五步: • (1)环境初始化 • (2)预编译 • (3)编译 • (4)链接 • (5)运行
负责控制程序流程

它们之间应该如何通信?
厦门大学计算机系 林子雨 ziyulin@ 2016版
《数据库系统原理》
嵌入式SQL语句与主语言之间的通信(续)
• 数据库工作单元与源程序工作单元之间的通信:

1. SQL通信区
向主语言传递SQL语句的执行状态信息 使主语言能够据此控制程序流程
《数据库系统原理》
厦门大学计算机系
林子雨
ziyulin@
2016版
游标(续)
《数据库系统原理》
厦门大学计算机系
林子雨
ziyulin@
2016版
四、建立和关闭数据库连接
建立数据库连接
EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];

第8章-存储过程的应用PPT课件

第8章-存储过程的应用PPT课件
ON S.productID = P.productID WHERE panyName = @customername
【例8.6】创建名为listEmployee的存储过程,其功能为:在员工表employee 中查找符合性别和超过指定工资条件的员工详细信息。 代码如下: CREATE PROCEDURE listEmployee @sex varchar(2), @salary money AS SELECT * FROM employee WHERE sex=@sex and salary>@salary 查找工资超过4000元的的男员工和工资超过3000元女员工的详细信息。 代码如下: EXEC listEmployee @sex='男',@salary=4000 EXEC listEmployee @salary=3500,@sex='女'
@参数名 数据类型[=默认值] OUTPUT
2、执行带输出参数的存储过程
语法如下。 EXEC[UTE] 存储过程名 [[@参数名=]{参数值 | @变量 [ OUTPUT ] | [默认值]}] [,...n]
查看存储过程
(1) sp_help用于显示存储过程的参数及其数据类型。语 法格式如下。
sp_help [[@objname=] 存储过程名 ]
“通恒机械有限公司”的联系人姓名、联系方式、以及该公司 订购产品的明细表。
不带参数的存储过程(续)
执行不带参数的存储过程
语法结构如下。 EXEC[UTE] 存储过程名 【例9】执行创建的Cu_tonghen_Order存储过程。
EXEC Cu_tonghen_Order
带输入参数的存储过程
创建带输入参数的存储过程
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Picture1
本书目录
例题8.2 编写子过程求 !,计算 !+7!-6! 编写子过程求N!,计算5! ! ! !,计算 例题 子过程: 子过程: Private Sub jcn(n%, jc%) Dim i% jc = 1 For i = 1 To n jc = jc * i Next i End Sub
本书目录
sub printhello print " hello" End sub
定义子过程的方法 引例1 ①在代码窗口直接定义 引例
②使用“添加过程”对话框 使用“添加过程” 作法如下: 作法如下: 新建窗体 视图—代码窗口 视图 代码窗口 工具—添加过程 工具 添加过程
本书目录
本书目录
输入过程名
Private Sub Command1_Click() Dim a%, b%, c%, d% Call jcn(5, a) Call jcn(7, b) Call jcn(6, c) d=a+b-c Print Print " 5!+7!-6!="; d End Sub 本书目录
8.3 函数过程
本书目录 本章目录
Sub command1_click() Dim a%, b%, c%, d%, e%, f%, g%, s! a = InputBox("输入三角形边长 输入三角形边长a") 输入三角形边长 b = InputBox("输入三角形边长 输入三角形边长b") 输入三角形边长 c = InputBox("输入三角形边长 输入三角形边长c") 输入三角形边长 d = InputBox("输入三角形边长 输入三角形边长d") 输入三角形边长 e = InputBox("输入三角形边长 输入三角形边长e") 输入三角形边长 f = InputBox("输入三角形边长 输入三角形边长f") 输入三角形边长 g = InputBox(“输入三角形边长 输入三角形边长g”) 输入三角形边长 S=area(a,b,c)+area(c,d,e)+area(e,f,g) Print Print " 多边形面积是:"; s 多边形面积是: End Sub
本书目录
8.1 过程概述
1 过程 过程是一段程序代码,用来执行某一特定功能。 过程是一段程序代码,用来执行某一特定功能。 2 过程分类 内部函数过程—Function—有返回值 内部函数过程 有返回值 系统提供 事件过程—Sub—无返回值 事件过程 无返回值 过程 以Sub为保留字开始的子过程 为保留字开始的子过程 自定义 以Function为保留字开始的函数过程 为保留字开始的函数过程 以Property为保留字开始的属性过程 为保留字开始的属性过程 以Event为保留字开始的事件过程 为保留字开始的事件过程
本书目录
窗体设计如下: 窗体设计如下:
Picture1
子过程为: 子过程为: Private Sub sarea(sw!, sh!) Dim s! s = sw * sh Print "面积为:"; s 面积为: 面积为 End Sub
Private Sub Picture1_Click() Dim w!, h! w = Picture1.Width h = Picture1.Height Print "图像框 图像框"; 图像框 sarea w, h End Sub 运行结果为: 运行结果为:
本书目录
本章目录
Private Sub Command1_Click() Dim c1% c1 = CountC(Text1.Text) ‘ 调用 调用CountC函数 函数 Picture1.Print Text1; Tab(20); "有"; c1; "个汉字 个汉字" 有 个汉字 End Sub Function CountC%(ByVal s$) Dim i%, t%, k%, c$ For i = 1 To Len(s) c = Mid(s, i, 1) '取一个字符 取一个字符 If Asc(c) < 0 Then k = k + 1 '汉字数加 汉字数加1 汉字数加 Next i CountC = k End Function Private Sub Command2_Click() Text1.Text = "" End Sub
本书目录
1 函数过程的定义
定义函数过程的方法与子过程相同,其形式如下: 定义函数过程的方法与子过程相同,其形式如下: [Public |Private] Function 函数过程名 形参 函数过程名(形参 形参)[As 类型 类型] 变量声明 函数返回值类型 语句块 [Exit Function] Return 表达式 或 函数名 表达式 函数名=表达式 End Function 说明: 说明: 全局函数过程, ①Public 全局函数过程,可被程序任何模块调用 ②Private 仅供本模块中的其它过程调用 形参(或称哑元 或称哑元) ③形参 或称哑元 只能是变量或数组名( 仅表示个数 类型,无值。 仅表示个数、 只能是变量或数组名 ),仅表示个数、类型,无值。
本书目录
子过程与函数过程的区别 把某功能定义为函数过程还是子过程,没有严格的规定。 把某功能定义为函数过程还是子过程,没有严格的规定。 一般若程序有一个返回值时,函数过程直观; 一般若程序有一个返回值时,函数过程直观;当有多个 返回值时,习惯用子过程。 返回值时,习惯用子过程。 函数过程必须有返回值,函数名有类型。 函数过程必须有返回值,函数名有类型。子过程名没有 过程名没有类型,不能在子过程体内对子过程名赋值。 值,过程名没有类型,不能在子过程体内对子过程名赋值。 参数问题 形参是过程与主调程序交互的接口, 形参是过程与主调程序交互的接口,从主调 程序获得初 或将计算结果返回给主调程序。 值,或将计算结果返回给主调程序。不要将过程中所有使用 过的变量均作为形参。 过的变量均作为形参。 形参没有具体的值,只代表了参数的个数、位置、类型; 形参没有具体的值,只代表了参数的个数、位置、类型; 只能是简单变量、数组名,不能是常量、数组元素、表达式。 只能是简单变量、数组名,不能是常量、数组元素、表达式。
本书目录
8.2 子过程
子过程的定义形式 子过程的定义形式 自定义标识符
Sub 子过程名 参数列表 子过程名[(参数列表 参数列表)] 局部变量或常数定义 语句序列 当有形参时各参数用逗号分隔。 当有形参时各参数用逗号分隔。 [Exit Sub] 当无形参时不要括号。 当无形参时不要括号。 语句序列 End Sub 中途退出子过程 无形参 例如: 例如:sub sum(x%,y%,z%,s%) s=x+y+z End sub 有形参
引例3 已知多边形各条边的长度,计算多边形的面积。 引例 已知多边形各条边的长度,计算多边形的面积。 分析:计算多边形面积,可将多边形分解成若干个三角形。 分析:计算多边形面积,可将多边形分解成若干个三角形。 计算三角形面积的公式如下: 计算三角形面积的公式如下: 1 area = c (c − x )( c − y )( c − z ) c = ( x + y + z ) 2
本书目录
本章目录
窗体设计
定义函数过程area 定义函数过程 Public Function area(x%, y%, z%) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqr (c * (c - x) * (c - y) * (c - z)) End Function
定义一个全局过程
定义一个局部过程
引例2 计算s=x+y+z 引例 计算
本书目录
需要输入 运行结果
本书目录
3 子过程的调用 子过程的调用是一句独立的调用语句,有两种形式: 子过程的调用是一句独立的调用语句,有两种形式: 子过程名[(实参列表 实参列表)] ① Call 子过程名 实参列表 实参列表]) ② 子过程名 ([实参列表 实参列表 注意: 注意: 有实参, 有实参,则实参必须用圆括号括起 ① 用Call调用 无实参圆括号省略 调用 实参只能是变量,不能是常量、表达式,也不能是控件名。 ② 实参只能是变量,不能是常量、表达式,也不能是控件名。 实参与形参的类型、顺序、 ③ 实参与形参的类型、顺序、个数要一致 4 应用举例 例题8.1 编写求矩形面积的子过程,调用该子过程求窗体上不同 编写求矩形面积的子过程, 例题 控件的面积。 控件的面积。 窗体上的控件任意设置,单击各个控件, 窗体上的控件任意设置,单击各个控件,其面积的大小 直接显示在窗体上。 直接显示在窗体上。
本书目录
2 函数的调用 变量名=函数过程名(实参列表) 变量名 函数过程名(实参列表) 函数过程名 实参列表与形参列表中的参数的类型、个数、 实参列表与形参列表中的参数的类型、个数、次序要一一对应 引例4 求任意2个整数的和 引例 求任意 个整数的和 Private Sub Command1_Click() Dim s%, n%, m% n = InputBox("输入第一个整数 输入第一个整数") 输入第一个整数 m = InputBox("输入第二个整数 输入第二个整数") 输入第二个整数 s = sum(n, m) Print n; "+"; m; "="; s End Sub
第章 过
8.1 过程概述 8.2 子过程 8.3 函数过程 8.4 参数传递

8.5 过程与变量的定义域
本书目录
本章目录
本章重点: 本章重点: ※过程的声明及过程的调用方法 过程的声明及过程的调用方法 ※函数过程的声明及过程的调用方法 函数过程的声明及过程的调用方法 ※参数传递及常用算法 参数传递及常用算法 本章难点: 本章难点: ※过程的创建 过程的创建 ※参数的传递 参数的传递 ※过程与变量的作用域 过程与变量的作用域 学习方法建议: 学习方法建议: 学习本章内容应重点掌握过程的声明、 学习本章内容应重点掌握过程的声明、调用方法及其常用算 掌握变量的作用域及参数传递的方法及其应用。 法,掌握变量的作用域及参数传递的方法及其应用。
相关文档
最新文档