第8章 游标、事务和锁_第1页
第8章 游标、事务和锁_第2页
第8章 游标、事务和锁_第3页
第8章 游标、事务和锁_第4页
第8章 游标、事务和锁_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章游标、事务和锁主编:刘志成本章学习导航本章学习导航

本章学习要点(1)声明游标、打开游标、提取游标数据和关闭游标。(2)循环处理游标。(3)游标的更新。(4)提交事务、回滚事务和设置保存点。(5)锁的功能及其类型。

建议课时:4课时8.1游标游标的概念游标(Cursor)是Oracle系统在内存中开辟的一块工作区,在该工作区中存放查询语句返回的结果集。结果集可以包含零条数据记录、一条数据记录,也可以是多条数据记录。在定义游标所在的工作区中,存在一个指针,在初始状态下,游标指针指向查询结果集的第一条数据记录的位置。当执行FETCH语句提取数据记录后,游标指针将向下移动一个数据记录的位置。Oracle中的游标分为显示游标和隐式游标。当查询返回的结果集超过一条数据记录时,就需要一个显式游标,此时用户不能使用SELECTINTO语句。显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开、提取和关闭PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时隐式游标自动关闭。8.1游标游标的概念游标通过以下方式扩展结果处理:从结果集的当前位置检索一行数据记录;支持对结果集的当前数据记录进行数据更新。PL/SQL游标一般按以下步骤来使用:(1)声明游标;(2)打开游标;(3)提取游标数据;(4)对当前数据记录执行更新操作(可选);(5)关闭游标。

课堂案例1—游标操作学习使用Oracle的PL/SQL语句声明游标、打开游标、提取游标数据和关闭游标的操作方法

。案例学习目标使用DECLARECURSOR声明游标、使用OPENCURSOR打开游标、使用FETCH提取游标数据、使用CLOSECURSOR关闭游标

。案例知识要点课堂案例1—游标操作案例完成步骤-基本步骤添加标题文字1.声明游标声明游标,就是使一个游标与一条查询语句建立联系。

DECLARE CURSOR<游标名>[(参数1数据类型[,…n])]IS查询语句

[FORUPDATE[OF[用户方案.]<表名>.<列名>[,…n]]];2.打开游标就是执行游标定义时所对应的查询语句,并把查询返回的结果集存储在游标对应的工作区中。

OPEN<游标名>[(参数1[,…n])];3.提取游标数据就是从定义游标的工作区中检索一条数据记录作为当前数据记录。

FETCH<游标名>INTO变量1[,…n]4.关闭游标

CLOSE<游标名>;教师演示讲解课堂案例1—游标操作案例完成步骤-实例添加标题文字【例1-1】使用游标查询商品表GOODS中第一款商品的信息。教师演示讲解8.1.3游标的属性

游标的属性添加标题文字(1)%ISOPEN描述游标是否已经打开,返回布尔型值。如果游标没有打开就直接使用FETCH语句提取游标数据,Oracle系统就会报告错误。(2)%FOUND描述最近一次FETCH操作的执行情况,返回布尔型值。如果最近一次使用FETCH语句提取游标数据得到结果则返回TRUE,否则返回FALSE。(3)%NOTFOUND用于描述最近一次FETCH操作的执行情况,返回布尔型值。但与%FOUND属性不同的是,如果最近一次使用FETCH语句提取游标数据没有得到结果则返回TRUE,否则返回FALSE。(4)%ROWCOUNT用于描述截至目前从游标工作区提取的实现记录数。

教师演示讲解8.1.3游标的属性

游标的属性【例1-3】使用游标查询商品表GOODS中所有商品的信息。教师演示讲解8.1.4游标中的循环

游标中的循环循环提取游标工作区内结果集的数据记录时,既可以通过LOOP循环来简单实现,也可以通过FOR循环来实现复杂功能。而且,使用FOR循环提取游标数据时,与其他方法有些差异,主要表现在:使用FOR循环提取游标数据时,Oracle系统自动打开游标,而不必显式地使用OPEN语句打开游标;Oracle系统隐含地定义了一个数据类型为%ROWTYPE的变量,并以此作为循环的计数器;Oracle系统自动重复从游标工作区内提取数据并放入计数器变量中;当游标工作区内所有数据记录都被提取完成或者循环中止时,Oracle系统会自动关闭游标

教师演示讲解8.1.4游标中的循环

游标中的循环【例1-4】使用游标查询商品表GOODS中“02”类型的所有商品的信息。可以通过使用FOR循环提取游标的数据,并向游标内部传入商品类别编号作为游标参数

教师演示讲解8.1.4游标的更新

游标的更新UPDATE或DELETE语句中的WHERECURRENTOF子句专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。要使用这个方法,在声明游标时必须使用FORUPDATE子句,当对话使用FORUPDATE子句打开一个游标时,所有返回集中的数据行都将处于行级(ROW-LEVEL)独占式锁定,其他对象只能查询这些数据行,不能进行UPDATE、DELETE或SELECT...FORUPDATE操作。在多表查询中,使用OF子句来锁定特定的表,如果忽略了OF子句,那么所有表中选择的数据行都将被锁定。如果这些数据行已经被其他会话锁定,那么在正常情况下Oracle将等待,直到数据行解锁。在UPDATE和DELETE中使用WHERECURRENTOF子句的语法格式如下:

WHERECURRENTOF<游标名|条件表达式>教师演示讲解8.1.4游标的更新

游标的更新【例1-5】使用带FORUPDATE子句的游标更新商品表GOODS中商品详细描述信息,并显示更新前后的信息

教师演示讲解8.2事务

事务概述事务(Transaction)是Oracle系统中进行数据库操作的基本单位。事务是一个操作序列,它包含了一组SQL语句,所有的SQL语句作为一个逻辑整体一起向Oracle系统提交或者撤销操作请求,即事务中的SQL语句要么都被执行,要么都不被执行。事务是Oracle系统中一个不可分割的逻辑工作单元。应用事务可以保证Oracle数据库的一致性和可恢复性

教师演示讲解8.2事务

事务概述一个事务的逻辑工作单元必须具有以下属性。(1)原子性(Atomicity)一个事务必须作为Oracle系统工作的原子单位(在化学中,原子称为“不可再分的微粒”),事务要么全部执行,要么全部不执行。(2)一致性(Consistency)当事务完成之后,所有数据必须处于一致性状态,事务所修改的数据必须遵循Oracle数据库的各种完整性约束。(3)隔离性(Isolation)一个事务所做的更新操作必须与其他事务所做的更新操作保持完全隔离,在并发处理过程中,一个事务所开始处理的数据必须为另一个事务处理前或者处理后的数据,而不能为另一个事务正在处理的数据。这种隔离性是通过Oracle的锁机制来实现的。(4)永久性(Durability)事务完成后,事务对数据库所做的更新被永久保持。事务的上述4种属性也称为事务的ACID(取每种属性的英文名称的首字母组成)属性

教师演示讲解课堂案例2—事务处理学习使用Oracle的PL/SQL语句进行事务提交、事务回滚、事务撤销和设置保存点等操作

。案例学习目标使用COMMIT事务提交、使用ROLLBACK进行事务回滚、事务撤销和使用SAVEPOINT设置事务保存点

。案例知识要点课堂案例2—事务处理案例完成步骤-事务提交添加标题文字1.事务提交事务提交(Commit)用于提交自上次提交以后对数据库中数据所做的改动。在Oracle数据库中,为了维护数据的一致性,系统为每个用户分别设置了一个工作区,对数据表中数据所做的添加、修改和删除操作都在工作区内完成。在Oracle系统中,提交事务的命令是COMMIT

添加标题文字教师演示讲解课堂案例2—事务处理案例完成步骤-事务提交添加标题文字【例1-6】提交更新商品表GOODS的事务。分析:在执行更新商品表GOODS的UPDATE语句后,只有当前用户可以看到数据库更新后的结果,此时还需要显式使用COMMIT命令(除非设置自动提交开关的状态为ON)提交事务,以使数据更新生效。

--执行数据更新操作

UPDATE SCOTT.GOODS SET g_DESCRIPTION='男人的衣柜,展现男人的魅力' WHERE g_ID='040001'; --提交事务

COMMIT;添加标题文字教师演示讲解课堂案例2—事务处理案例完成步骤-事务回滚添加标题文字事务回滚(Rollback)是指当事务中的某一条SQL语句执行失败时,将对数据库的操作恢复到事务执行前或者某个指定位置。

ROLLBACK[TO<保存点>];【例1-7】更新商品表GOODS的信息,并回滚该事务。

--执行数据更新操作

UPDATE SCOTT.GOODS SET g_DESCRIPTION=NULL WHERE g_ID='040001'; --回滚事务

ROLLBACK;添加标题文字教师演示讲解课堂案例2—事务处理案例完成步骤-设置保存点添加标题文字如果让事务回滚到指定位置,需要在事务中预先设置事务保存点(SavePoint)。所谓保存点,是指在其所在位置之前的事务语句不能回滚的位置,回滚事务后,保存点之后的事务语句被回滚,但保存点之前的事务语句依然被有效执行,即不能回滚。

SAVEPOINT<保存点名>;添加标题文字教师演示讲解课堂案例2—事务处理案例完成步骤-设置保存点添加标题文字添加标题文字教师演示讲解8.3锁

锁的概述Oracle通过使用锁(Lock)机制维护数据的完整性、并发性和一致性。Oracle在两个不同级别上提供读取一致性:语句级读取一致性和事务级读取一致性。(1)语句级读取一致性Oracle总是实施语句级读取一致性,保证单个查询所返回的数据与该查询开始时刻保持一致。(2)事务级读取一致性事务级读取一致性是指在同一个事务中的所有数据对时间点是一致的。教师演示讲解8.3锁

锁的类型根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(DataLocks,数据锁),用于保护数据的完整性;DDL锁(DictionaryLocks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(InternalLocksandLatches),保护数据库的内部结构。DML锁的目的在于保证并发情况下的数据完整性,在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论