游标、存储过程和触发器_数据库课件讲义

上传人:今*** 文档编号:108181262 上传时间:2019-10-22 格式:PPT 页数:71 大小:1.09MB
返回 下载 相关 举报
游标、存储过程和触发器_数据库课件讲义_第1页
第1页 / 共71页
游标、存储过程和触发器_数据库课件讲义_第2页
第2页 / 共71页
游标、存储过程和触发器_数据库课件讲义_第3页
第3页 / 共71页
游标、存储过程和触发器_数据库课件讲义_第4页
第4页 / 共71页
游标、存储过程和触发器_数据库课件讲义_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《游标、存储过程和触发器_数据库课件讲义》由会员分享,可在线阅读,更多相关《游标、存储过程和触发器_数据库课件讲义(71页珍藏版)》请在金锄头文库上搜索。

1、第10章 游标、存储过程和触发器,第10章 游标、存储过程和触发器,介绍Oracle数据库程序设计中经常会用到的3个概念,即游标、存储过程和触发器。,第10章 游标、存储过程和触发器,本章学习目标,理解游标的基本概念; 掌握游标的基本操作、属性操作和循环游标; 掌握PL/SQL语言的三种存储过程; 理解触发器的概念,掌握创建和使用触发器的方法;,第10章 游标、存储过程和触发器,本章知识点,游标 存储过程管理 触发器管理,第10章 游标、存储过程和触发器,游标,游标的基本概念 游标控制语句 游标属性 游标FOR循环,第10章 游标、存储过程和触发器,游标的基本概念,游标:游动的光标。游标是映射

2、在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。游标分两种: 显式游标 隐式游标,第10章 游标、存储过程和触发器,游标的基本概念,游标示意图,游标,第10章 游标、存储过程和触发器,游标的基本概念,隐式游标 不需要声明,使用时也不需要执行打开和关闭操作。实际上,就是在Select语句中增加了INTO子句,把结果集自动读取到指定的比变量中。 【例】使用SELECT语句声明隐式游标,从Students表中读取Sname字段的值到变量VSname: DECLARE VSname Studen

3、ts.Sname%Type; BEGIN SELECT Sname INTO VSname FROM Students WHERE Sdept=Automation; dbms_output.put_line(VSname); END;,第10章 游标、存储过程和触发器,游标的基本概念,显式游标 显式游标需要声明,在使用之前需要打开游标,使用完成后要关闭游标。使用显式游标的步骤包括: (1)声明游标。 (2)打开游标。 (3)读取数据。 (4)关闭游标。,第10章 游标、存储过程和触发器,游标控制语句,(1)声明游标语句CURSOR: DECLARE CURSOR () IS ; 【例】声明一

4、个游标MyCur,读取指定类型的用户信息: DECLARE CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;,第10章 游标、存储过程和触发器,游标控制语句,(2)打开游标语句OPEN: OPEN () ; 【例】打开游标MyCur,读取类型为1的用户信息: OPEN MyCur(1);,第10章 游标、存储过程和触发器,游标控制语句,(3)游标取值语句FETCH。游标取值语句FETCH的基本语法结构如下: FETCH INTO ; 【例】在打开的游标MyCu

5、r的当前位置读取数据: FETCH MyCur INTO varId,varName; (4)关闭游标语句CLOSE: CLOSE ; 【例】关闭游标MyCur: CLOSE MyCur;,第10章 游标、存储过程和触发器,游标控制语句,【例】下面介绍一个完整的游标应用实例: /* 打开显示模式 */ SET ServerOutput ON; DECLARE -开始声明部分 varId NUMBER; -声明变量,用来保存游标中的用户编号 varName VARCHAR2(50); -声明变量,用来保存游标中的用户名 -定义游标, varType为参数, 指定用户类型编号 CURSOR MyC

6、ur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType; BEGIN -开始程序体 OPEN MyCur(1); -打开游标,参数为1,表示读取用户类型编号为1的记录 FETCH MyCur INTO varId, varName; -读取当前游标位置的数据 CLOSE MyCur; -关闭游标 dbms_output.put_line(用户编号: | varId |, 用户名: | varName); -显示读取的数据 END; -结束程序体,第10章 游标、存储过程和触发器,The

7、End,第10章 游标、存储过程和触发器,下 课 啦 !,第10章 游标、存储过程和触发器,游标属性,(1)%ISOPEN属性 判断游标是否被打开,如果打开,则%ISOPEN等于TRUE,否则等于FALSE。 【例】下面的代码演示当使用未打开的游标时,将会出现错误: /* 打开显示模式 */ SET ServerOutput ON; DECLARE -开始声明部分 varName VARCHAR2(50); -声明变量,用来保存游标中的用户名 varId NUMBER; -声明变量,用来保存游标中的用户编号 -定义游标, varType为参数, 指定用户类型编号 CURSOR MyCur(va

8、rType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType; BEGIN -开始程序体 FETCH MyCur INTO varId, varName; -读取当前游标位置的数据 CLOSE MyCur; -关闭游标 dbms_output.put_line(用户编号: | varId |, 用户名: | varName); -显示读取的数据 END; -结束程序体,第10章 游标、存储过程和触发器,游标属性,【例】修改上面的程序,在使用游标之前,调用%ISOPEN属性判断游标是否打开。 /* 打开显

9、示模式 */ SET ServerOutput ON; DECLARE -开始声明部分 varName VARCHAR2(50); -声明变量,用来保存游标中的用户名 varId NUMBER; -声明变量,用来保存游标中的用户编号 -定义游标, varType为参数, 指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType; BEGIN -开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(2); END I

10、F; FETCH MyCur INTO varId, varName; -读取当前游标位置的数据 CLOSE MyCur; -关闭游标 dbms_output.put_line(用户编号: | varId |, 用户名: | varName); -显示读取的数据 END; -结束程序体,第10章 游标、存储过程和触发器,游标属性,(2)%FOUND属性和%NOTFOUND属性 %FOUND属性用来判断游标所在的行是否有效,如果有效,返回TRUE,无效时返回FALSE。 【例】%FOUND属性可以循环执行游标读取数据: /* 打开显示模式 */ SET ServerOutput ON; DECL

11、ARE -开始声明部分 varName VARCHAR2(50); -声明变量,用来保存游标中的用户名 varId NUMBER; -声明变量,用来保存游标中的用户编号 -定义游标, varType为参数, 指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType; BEGIN -开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(1); END IF; FETCH MyCur INTO varId, varNa

12、me; -读取当前游标位置的数据 WHILE MyCur%FOUND -如果当前游标有效,则执行循环 LOOP dbms_output.put_line(用户编号: | varId |, 用户名: | varName); -显示读取的数据 FETCH MyCur INTO varId, varName; -读取当前游标位置的数据 END LOOP; CLOSE MyCur; -关闭游标 END; -结束程序体,第10章 游标、存储过程和触发器,游标属性,(3)%ROWCOUNT属性 返回到当前位置为止游标读取的记录行数。 【例】只读取前2行记录: /* 打开显示模式 */ SET Server

13、Output ON; DECLARE -开始声明部分 varName VARCHAR2(50); -声明变量,用来保存游标中的用户名 varId NUMBER; -声明变量,用来保存游标中的用户编号 -定义游标, varType为参数, 指定用户类型编号 CURSOR MyCur(varType NUMBER) IS SELECT UserId, UserName FROM Users WHERE UserType = varType;,第10章 游标、存储过程和触发器,游标属性,BEGIN -开始程序体 IF MyCur%ISOPEN = FALSE Then OPEN MyCur(1);

14、END IF; FETCH MyCur INTO varId, varName; -读取当前游标位置的数据 WHILE MyCur%FOUND -如果当前游标有效,则执行循环 LOOP dbms_output.put_line(用户编号: | varId |, 用户名: | varName); -显示读取的数据 IF MyCur%ROWCOUNT = 2 THEN EXIT; END IF; FETCH MyCur INTO varId, varName; -读取当前游标位置的数据 END LOOP; CLOSE MyCur; -关闭游标 END; -结束程序体,第10章 游标、存储过程和触发

15、器,第10章 游标、存储过程和触发器,游标FOR循环,游标FOR循环是显式游标的一种快捷使用方式,它使用FOR循环依次读取结果集中的行数据。 当FOR循环开始时,游标被自动打开(不再需要OPEN语句); 每循环一次,系统自动读取游标当前行的数据(不需要使用FETCH语句); 当退出循环时,游标自动关闭(不需要使用CLOSE语句)。,第10章 游标、存储过程和触发器,游标FOR循环,游标FOR循环通常与PL/SQL记录一起使用。 PL/SQL记录(RECORD)是由一组数据构成的逻辑单元,并不保存在数据库中,与变量一样,保存在内存空间中。 使用记录时,需要先定义记录的结构,然后声明记录变量。 定

16、义记录类型的基本语法如下: TYPE IS RECORD (字段声明 ,字段声明 ); 定义记录变量的方法与定义普通变量的方法相同,语法如下: ,第10章 游标、存储过程和触发器,游标FOR循环,【例】声明记录类型User_Record_Type和定义记录变量var_UserRecord: TYPE User_Record_Type IS RECORD ( UserId Users.UserId%Type, UserName Users.UserName%Type); var_UserRecord User_Record_Type;,第10章 游标、存储过程和触发器,游标FOR循环,【例】PL/SQL记录可以与游标结合使用: /* 打开显示模式 */ SET ServerOutput ON; DECLARE -开始声

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号