Oracle游标事务和锁
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
课堂案例2—事务处理
案例完成步骤-事务提交 【例1-6】提交更新商品表GOODS的事务。 分析:在执行更新商品表GOODS的UPDATE语句后,只
有当前用户可以看到数据库更新后的结果,此时还需要显
式使用COMMIT命令(除非设置自动提交开关的状态为 ON)提交事务,以使数据更新生效。 --执行数据更新操作 UPDATE SET 男人的魅力' WHERE --提交事务 COMMIT;
Oracle 数据库管理与应用实例教程
教 师 演 示 讲 解
8.1.3 游标的属性
游标的属性
【 例 1-3】 使 用游标查询 商 品 表 GOODS 中所 有商品的信 息。
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
8.1.4 游标中的循环
游标中的循环 循环提取游标工作区内结果集的数据记录时,既可以通过 LOOP循环来简单实现,也可以通过FOR循环来实现复杂 功能。而且,使用FOR循环提取游标数据时,与其他方法 有些差异,主要表现在: 使用FOR循环提取游标数据时,Oracle系统自动打开游 标,而不必显式地使用OPEN语句打开游标; Oracle系统隐含地定义了一个数据类型为%ROWTYPE 的变量,并以此作为循环的计数器; Oracle系统自动重复从游标工作区内提取数据并放入计 数器变量中; 当游标工作区内所有数据记录都被提取完成或者循环中 止时,Oracle系统会自动关闭游标
Oracle 数据库管理与应用实例教程
课堂案例2—事务处理
案例完成步骤-事务提交 1.事务提交 事务提交(Commit)用于提交自上次提交以后对数据库 中数据所做的改动。在Oracle数据库中,为了维护数据 的一致性,系统为每个用户分别设置了一个工作区,对 数据表中数据所做的添加、修改和删除操作都在工作区 内完成。 在Oracle系统中,提交事务的命令是COMMIT
Oracle总是实施语句级读取一致性,保证单个查询所返回的
数据与该查询开始时刻保持一致。 (2)事务级读取一致性 事务级读取一致性是指在同一个事务中的所有数据对时间点
是一致的。
Oracle 数据库管理与应用实例教程
8.3 锁
锁的类型 根据保护的对象不同,Oracle数据库锁可以分为以下几大类: DML锁(Data Locks,数据锁),用于保护数据的完整性; DDL锁(Dictionary Locks,字典锁),用于保护数据库对
Oracle 数据库管理与应用实例教程
教 师 演 示 讲 解
8.1.4 游标的更新
游标的更新
【例1-5】使用带FOR UPDATE子句的游标更新商品表 GOODS中商品详细描述信息,并显示更新前后的信息
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
8.2 事务
事务概述
事务(Transaction)是Oracle系统中进行数据库操作的
Oracle 数据库管理与应用实例教程
8.2 事务
事务概述
一个事务的逻辑工作单元必须具有以下属性。 (1)原子性(Atomicity) 一个事务必须作为Oracle系统工作的原子单位(在化学中,原子称 为“不可再分的微粒”),事务要么全部执行,要么全部不执行。 (2)一致性(Consistency) 当事务完成之后,所有数据必须处于一致性状态,事务所修改的数 据必须遵循Oracle数据库的各种完整性约束。 (3)隔离性(Isolation) 一个事务所做的更新操作必须与其他事务所做的更新操作保持完全 隔离,在并发处理过程中,一个事务所开始处理的数据必须为另一 个事务处理前或者处理后的数据,而不能为另一个事务正在处理的 数据。这种隔离性是通过Oracle的锁机制来实现的。 (4)永久性(Durability) 事务完成后,事务对数据库所做的更新被永久保持。 事务的上述4种属性也称为事务的ACID(取每种属性的英文名称的 首字母组成)属性
Oracle 数据库管理与应用实例教程
SCOTT.GOODS
g_DESCRIPTION = '男人的衣柜,展现 g_ID = ' 040001';
教 师 演 示 讲 解
课堂案例2—事务处理
案例完成步骤-事务回滚 事务回滚(Rollback)是指当事务中的某一条SQL语句 执行失败时,将对数据库的操作恢复到事务执行前或者 某个指定位置。 ROLLBACK [TO <保存点>]; 【例1-7】更新商品表GOODS的信息,并回滚该事务。 --执行数据更新操作 UPDATE SCOTT.GOODS SET g_DESCRIPTION = NULL WHERE g_ID = ' 040001'; --回滚事务 ROLLBACK;
Oracle 数据库管理与应用实例教程
课堂案例2—事务处理
案例完成步骤-设置保存点
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
Βιβλιοθήκη Baidu
8.3 锁
锁的概述
Oracle通过使用锁(Lock)机制维护数据的完整性、并 发性和一致性。 Oracle在两个不同级别上提供读取一致性:语句级读取一 致性和事务级读取一致性。 (1)语句级读取一致性 教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
课堂案例1—游标操作
案例完成步骤-基本步骤 1.声明游标 声明游标,就是使一个游标与一条查询语句建立联系。 DECLARE CURSOR <游标名>[(参数1 数据类型 [,…n])] IS 查询语句 [FOR UPDATE [OF [用户方案.]<表名 >.<列名> [,…n]]]; 2.打开游标 就是执行游标定义时所对应的查询语句,并把查询返回 的结果集存储在游标对应的工作区中。 OPEN <游标名>[(参数1 [,…n])]; 3.提取游标数据 就是从定义游标的工作区中检索一条数据记录作为当前 数据记录。 FETCH <游标名> INTO 变量1 [,… n] 4.关闭游标 CLOSE <游标名>;
象的结构,如表、索引等的结构定义;内部锁和闩
(Internal Locks and Latches),保护数据库的内部结构。 DML锁的目的在于保证并发情况下的数据完整性,在Oracle 数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表 级锁,TX锁称为事务锁或行级锁。 当Oracle执行DML语句时,系统自动在所要操作的表上申请 TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁, 并将实际锁定的数据行的锁标志位进行置位。这样在事务加 锁前检查TX锁相容性时就不用再逐行检查锁标志了,而只需 检查TM锁模式的相容性即可,大大提高了系统的效率。
Oracle 数据库管理与应用实例教程
教 师 演 示 讲 解
课堂案例1—游标操作
案例完成步骤-实例 【例1-1】使用游标查询商品表GOODS中第一款商品的信息。
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
8.1.3 游标的属性
游标的属性
(1)%ISOPEN 描述游标是否已经打开,返回布尔型值。如果游标没有打 开就直接使用FETCH语句提取游标数据,Oracle系统就会 报告错误。 (2)%FOUND 描述最近一次FETCH操作的执行情况,返回布尔型值。如 果最近一次使用FETCH语句提取游标数据得到结果则返回 TRUE,否则返回FALSE。 (3)%NOTFOUND 用于描述最近一次FETCH操作的执行情况,返回布尔型值。 但与%FOUND属性不同的是,如果最近一次使用FETCH 语句提取游标数据没有得到结果则返回TRUE,否则返回 FALSE。 (4)%ROWCOUNT 用于描述截至目前从游标工作区提取的实现记录数。
8.1 游标
游标的概念 游标(Cursor)是Oracle系统在内存中开辟的一块工作区,在该工作 区中存放查询语句返回的结果集。 结果集可以包含零条数据记录、一条数据记录,也可以是多条数据记 录。在定义游标所在的工作区中,存在一个指针,在初始状态下,游标 指针指向查询结果集的第一条数据记录的位置。当执行FETCH语句提取 数据记录后,游标指针将向下移动一个数据记录的位置。 Oracle中的游标分为显示游标和隐式游标。 当查询返回的结果集超过一条数据记录时,就需要一个显式游标,此 时用户不能使用SELECT INTO语句。显式游标在PL/SQL块的声明部分 声明,在执行部分或异常处理部分打开、提取和关闭 PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时隐
基本单位。 事务是一个操作序列,它包含了一组SQL语句,所有的 SQL语句作为一个逻辑整体一起向Oracle系统提交或者撤 教 师 演 示 讲 解
销操作请求,即事务中的SQL语句要么都被执行,要么都
不被执行。 事务是Oracle系统中一个不可分割的逻辑工作单元。应 用事务可以保证Oracle数据库的一致性和可恢复性
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
课堂案例2—事务处理
案例完成步骤-设置保存点 如果让事务回滚到指定位置,需要在事务中预先设置事 务保存点(Save Point)。所谓保存点,是指在其所在 位置之前的事务语句不能回滚的位置,回滚事务后,保 存点之后的事务语句被回滚,但保存点之前的事务语句 依然被有效执行,即不能回滚。 SAVEPOINT <保存点名>; 教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
课堂案例1—游标操作
案例学习目标 学习使用Oracle 的PL/SQL语句声明游标、打开游标、提取游标数据和关 闭游标的操作方法 。
案例知识要点 使用DECLARE CURSOR声明游标、使用OPEN CURSOR打开游标、 使用FETCH提取游标数据、使用CLOSE CURSOR关闭游标 。
教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
8.1.4 游标中的循环
游标中的循环 【例1-4】使用游标查询商品表GOODS中“02”类型的所有 商品的信息。 可以通过使用FOR循环提取游标的数据,并向游标内部传 入商品类别编号作为游标参数 教 师 演 示 讲 解
Oracle 数据库管理与应用实例教程
8.1.4 游标的更新
游标的更新 UPDATE或DELETE语句中的WHERE CURRENT OF子句 专门处理要执行UPDATE或DELETE操作的表中取出的最近 的数据。要使用这个方法,在声明游标时必须使用FOR UPDATE子句,当对话使用FOR UPDATE子句打开一个游 标时,所有返回集中的数据行都将处于行级(ROW-LEVEL) 独占式锁定,其他对象只能查询这些数据行,不能进行 UPDATE、DELETE或SELECT...FOR UPDATE操作。 在多表查询中,使用OF子句来锁定特定的表,如果忽略了 OF子句,那么所有表中选择的数据行都将被锁定。如果这 些数据行已经被其他会话锁定,那么在正常情况下Oracle 将等待,直到数据行解锁。 在UPDATE和DELETE中使用WHERE CURRENT OF子句 的语法格式如下: WHERE CURRENT OF <游标名|条件表达式>
式游标自动关闭。
Oracle 数据库管理与应用实例教程
8.1 游标
游标的概念
游标通过以下方式扩展结果处理: 从结果集的当前位置检索一行数据记录; 支持对结果集的当前数据记录进行数据更新。 PL/SQL游标一般按以下步骤来使用: (1)声明游标; (2)打开游标; (3)提取游标数据; (4)对当前数据记录执行更新操作(可选); (5)关闭游标。
Oracle 数据库管理与应用实例教程
教 师 演 示 讲 解
课堂案例2—事务处理
案例学习目标 学习使用Oracle 的PL/SQL语句进行事务提交、事务回滚、事务撤销和设 置保存点等操作 。
案例知识要点 使用COMMIT事务提交、使用ROLLBACK进行事务回滚、事务撤销和使 用SAVEPOINT设置事务保存点 。
第8章 游标、事务和锁
主编:刘志成
本章学习导航
本章学习导航
Oracle 数据库管理与应用实例教程
本章学习要点
(1)声明游标、打开游标、提取游标数据和关 闭游标。
(2)循环处理游标。
(3)游标的更新。 (4)提交事务、回滚事务和设置保存点。 (5)锁的功能及其类型。
建议课时:4课时
Oracle 数据库管理与应用实例教程