### Oracle 教学知识点梳理 —— 事务、过程、触发器等高级特性 #### 一、事务基础 **事务**是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么全部执行成功,要么全部不执行。事务具有四个重要的属性,即所谓的ACID属性: 1. **原子性(Atomicity)**:事务中的所有操作被视为一个不可分割的整体,要么全部执行,要么全部不执行。 2. **一致性(Consistency)**:事务的执行不会破坏系统的完整性约束,即事务结束时,数据必须处于一致状态。 3. **隔离性(Isolation)**:事务之间相互隔离,一个事务的执行不受其他事务的影响。 4. **持久性(Durability)**:一旦事务提交,对数据库所做的更改就是永久性的。 **转账示例**:假设有一个转账场景,需要从账户A扣款并将款项转入账户B。这一过程包含两步操作:从A账户扣款、向B账户加款。如果在这个过程中出现了任何问题(比如网络中断),那么整个转账过程应该回滚,确保两个账户的资金回到转账前的状态。 **事务管理命令**: - `COMMIT`:提交事务,使更改永久化。 - `SAVEPOINT`:设置一个回滚点,可以在之后回滚到这个点。 - `ROLLBACK`:撤销事务中的更改。 #### 二、游标与数据处理 **游标**是一种用于逐行处理查询结果的技术。它可以分为两类: 1. **隐式游标**:由系统自动声明、打开和关闭的游标,主要用于获取最近执行的DML语句的信息。 2. **显式游标**:用户自定义的游标,需要手动声明、打开、读取和关闭。 **隐式游标属性**: - `%FOUND`:如果查询返回至少一行,则为TRUE。 - `%NOTFOUND`:如果查询没有返回任何行,则为TRUE。 - `%ROWCOUNT`:受影响的行数。 - `%ISOPEN`:始终为FALSE,因为隐式游标不是真正意义上的打开状态。 **显式游标的使用步骤**: 1. 声明游标:`DECLARE CURSOR 游标名 IS 查询语句;` 2. 打开游标:`OPEN 游标名;` 3. 获取数据:使用`FETCH 游标名 INTO 变量列表;`来读取当前行的数据。 4. 关闭游标:`CLOSE 游标名;` **示例**:如果想要为工资未达到2000元的员工增加500元的工资,但又不希望他们的工资超过2200元,可以使用显式游标逐一处理符合条件的员工记录。 #### 三、过程与函数 **过程**类似于编程语言中的方法,可以用来执行一系列复杂的业务逻辑。它们可以有输入参数、输出参数和返回值。 **创建过程**: ```sql CREATE OR REPLACE PROCEDURE 过程名 ( 参数名 IN 类型, -- 输入参数 参数名 OUT 类型, -- 输出参数 参数名 INOUT 类型 -- 输入输出参数 ) AS BEGIN -- PL/SQL 语句 END; ``` **函数**与过程类似,但主要区别在于函数必须有返回值,并且可以在SQL查询中直接调用。 **创建函数**: ```sql CREATE OR REPLACE FUNCTION 函数名 (参数) RETURN 数据类型 AS BEGIN -- PL/SQL 语句 RETURN 数据; END; ``` **函数限制**: - 函数只能接受IN参数。 - 形参不能是PL/SQL类型。 - 返回类型必须是数据库类型。 #### 四、触发器 **触发器**是一种特殊类型的存储过程,当特定事件(如INSERT、UPDATE或DELETE)发生在指定表上时自动执行。触发器的主要目的是维护数据完整性,例如在更新数据时确保符合某些规则。 **触发器的组成部分**: - **触发事件**:触发器执行的时机,比如INSERT、UPDATE或DELETE。 - **触发时间**:触发器何时执行,包括BEFORE和AFTER两种情况。 - **触发条件**:可选,用于进一步细化触发器的执行条件。 - **触发动作**:当触发器被激活时执行的操作。 **触发器示例**:创建一个触发器,在向表中插入新记录之前验证某些条件。 Oracle提供了丰富的工具和技术来帮助开发人员高效地管理和操作数据库。事务确保了数据的一致性和完整性,游标使得逐行处理数据变得简单,而过程、函数和触发器则提供了强大的扩展性和灵活性,使得开发者能够在数据库层面实现复杂的业务逻辑。
剩余37页未读,继续阅读
- 粉丝: 0
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助