oracle 游标 深入浅出 详解 精析 示例
oracle游标 详解 精析 示例 真正能把游标讲透、说全、调理清晰的讲义。 游标犹如C语言的指针:灵活、实用、高效。 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。 游标是一个通过定义语句与一条Select语句相关联的一组SQL语句。 Oracle游标是数据库管理系统中的一种重要机制,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标类似于C语言中的指针,能够灵活、高效地处理多条记录,尤其在需要循环处理或者根据当前行数据做决策的情况下非常有用。 在PL/SQL中,游标分为显式游标和隐式游标。显式游标需要明确地声明、打开、提取和关闭,而隐式游标则由系统自动管理,通常在单行查询结果中使用。 **4.1 游标概念** 游标本质上是在内存中为SQL查询结果分配的一个工作区,称为上下文区或缓冲区。这个工作区包含查询结果的多行记录,游标则是一个指针,用于跟踪和访问这些记录。每个用户会话可以同时打开多个游标,数量由数据库参数`OPEN_CURSORS`控制。游标根据SQL语句的类型有不同的行为: - 非查询语句:通常不涉及游标。 - 单行查询:隐式游标自动处理。 - 多行查询:需要使用显式游标或隐式游标。 **4.1.1 处理显式游标** 显式游标的处理包括以下步骤: 1. **定义/声明游标**:定义游标名和与其关联的SELECT语句,可以带有参数但不支持长度约束。例如: ```sql CURSOR c_employee(name VARCHAR2) IS SELECT * FROM employees WHERE last_name = name; ``` 2. **打开游标**:执行SELECT语句并将结果存入工作区。可以锁定数据行(如果使用`FOR UPDATE`)。例如: ```sql OPEN c_employee('Doe'); ``` 3. **提取游标数据**:使用`FETCH`语句将数据行赋值给变量。如果游标移到末尾,`%NOTFOUND`属性变为TRUE。例如: ```sql FETCH c_employee INTO v_employee_rec; ``` 4. **处理记录**:根据需要对提取的数据进行操作。 5. **关闭游标**:使用`CLOSE`语句释放资源。例如: ```sql CLOSE c_employee; ``` **4.1.2 处理隐式游标** 隐式游标在执行单行查询时自动创建,无需显式声明。例如: ```sql BEGIN SELECT salary INTO v_salary FROM employees WHERE id = 100; -- 如果没有找到记录,将会引发NO_DATA_FOUND异常 END; ``` **4.1.3 关于 `NO_DATA_FOUND` 和 `%NOTFOUND` 的区别** - `NO_DATA_FOUND` 是一个异常,当尝试从游标中提取不存在的数据时抛出。 - `%NOTFOUND` 是游标属性,当尝试提取的数据行不存在时,其值变为TRUE。 **4.1.4 使用游标更新和删除数据** 游标可以与`FOR UPDATE`子句结合,允许在`WHERE CURRENT OF`子句中更新或删除当前行。例如: ```sql DECLARE CURSOR c_update IS SELECT * FROM employees WHERE salary < 50000 FOR UPDATE; v_id employees.id%TYPE; BEGIN OPEN c_update; LOOP FETCH c_update INTO v_id; EXIT WHEN c_update%NOTFOUND; UPDATE employees SET salary = salary * 1.1 WHERE CURRENT OF c_update; END LOOP; CLOSE c_update; END; ``` **4.2 游标变量** 游标变量允许将游标作为参数传递,或者存储在PL/SQL变量中。它们简化了代码复用和模块化。 **4.2.1 声明游标变量** ```sql DECLARE TYPE cur_type IS REF CURSOR RETURN employees%ROWTYPE; v_cursor cur_type; BEGIN OPEN v_cursor FOR SELECT * FROM employees; -- 现在可以将v_cursor作为参数传递 END; ``` **4.2.2 游标变量操作** 游标变量的使用与显式游标类似,但无需定义游标,而是直接打开和关闭变量。 游标在PL/SQL中扮演着至关重要的角色,提供了处理复杂数据流和交互的强大工具。了解并熟练掌握游标的使用,对于编写高效、灵活的数据库应用程序至关重要。
剩余63页未读,继续阅读
- xtwxtj2012-12-12此文档最适合初次学习游标者,不仅有概念介绍和例子解析比较详细
- shikebing2013-12-23讲的挺深入,很不错
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助