Oracle深入浅出:预定义异常与事务处理

需积分: 9 1 下载量 63 浏览量 更新于2024-08-15 收藏 276KB PPT 举报
"预定义异常-ORACLE深入浅出-中级篇" 在Oracle数据库管理系统中,预定义异常是指系统已经预先定义好的错误类型,当特定的错误情况发生时,这些异常会被自动抛出。理解并有效地处理这些异常对于编写健壮的数据库应用程序至关重要。 1. **Others 处理所有异常** `Others` 是一个万能的异常处理子句,它可以捕获那些没有被其他特定异常处理程序捕获的任何异常。当遇到未知或未预见的异常时,`Others` 可以确保程序不会无控制地崩溃。 2. **DUP_VAL_ON_INDEX** 当用户尝试插入一个在具有唯一索引的列中已经存在的值时,会触发 `DUP_VAL_ON_INDEX` 异常。这通常发生在违反了唯一性约束的情况下,如主键或唯一键约束。 3. **INVALID_NUMBER** 这个异常在尝试将一个不能转换为有效数字的字符串转换为数值类型时抛出。例如,当尝试将包含非数字字符的字符串解析为整数或浮点数时,就会遇到这个问题。 4. **NO_DATA_FOUND** 当SQL查询无法找到预期的数据,比如在执行一个 `SELECT INTO` 语句后没有找到匹配的行时,会抛出 `NO_DATA_FOUND` 异常。这通常发生在试图从表中获取特定数据但该数据不存在时。 5. **TOO_MANY_ROWS** `TOO_MANY_ROWS` 异常发生在 `SELECT INTO` 语句返回多于一行数据时。因为 `SELECT INTO` 语句设计用于将结果集的单行数据赋值给变量,如果返回多行,就会导致这个异常。 6. **ZERO_DIVIDE** 在执行除法运算且除数为零时,Oracle会抛出 `ZERO_DIVIDE` 异常。这是因为在数学上,除以零是未定义的,因此程序需要对此进行特殊处理以避免运行时错误。 在处理这些预定义异常时,开发人员可以使用PL/SQL的异常处理结构,如 `BEGIN...EXCEPTION...END` 块,来捕获和处理这些异常。例如,可以为每个预定义异常编写特定的处理代码,或者使用 `Others` 来处理未定义的异常。 在Oracle中,事务是数据操作的基本单位,确保了数据的一致性和完整性。事务具有ACID(原子性、一致性、隔离性和持久性)特性,确保了事务内部的操作要么全部完成,要么全部回滚,以维护数据库的稳定状态。 1. **原子性(Atomicity)** - 事务中的所有操作被视为一个不可分割的整体,要么全部成功,要么全部失败。 2. **一致性(Consistency)** - 事务结束后,数据库总是处于一致状态,满足所有的业务规则。 3. **隔离性(Isolation)** - 事务之间是隔离的,防止一个事务影响另一个事务的执行。 4. **持久性(Durability)** - 一旦事务提交,其更改就会永久保存在数据库中。 在Oracle中,可以通过 `COMMIT` 和 `ROLLBACK` 语句来提交和回滚事务。`SAVEPOINT` 可用于设置事务的保存点,允许在回滚时只撤销部分事务。 锁是Oracle用来管理并发访问数据的机制,以防止数据的不一致性和更新丢失。有悲观锁和乐观锁两种类型: 1. **悲观锁定** - 在数据被修改前就对其进行锁定,确保其他用户在修改期间无法访问该数据,直到事务结束。 2. **乐观锁定** - 相对乐观,假设并发访问时不会有冲突,只有在提交更改时才会检查数据是否被其他事务修改,如果检测到冲突则回滚事务。 了解并熟练掌握这些概念对于高效、安全地使用Oracle数据库至关重要,特别是在多用户环境下进行并发操作时。