oracle数据库基础6--游标管理教学提纲

上传人:yulij****0329 文档编号:141462357 上传时间:2020-08-08 格式:PPT 页数:24 大小:494KB
返回 下载 相关 举报
oracle数据库基础6--游标管理教学提纲_第1页
第1页 / 共24页
oracle数据库基础6--游标管理教学提纲_第2页
第2页 / 共24页
oracle数据库基础6--游标管理教学提纲_第3页
第3页 / 共24页
oracle数据库基础6--游标管理教学提纲_第4页
第4页 / 共24页
oracle数据库基础6--游标管理教学提纲_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《oracle数据库基础6--游标管理教学提纲》由会员分享,可在线阅读,更多相关《oracle数据库基础6--游标管理教学提纲(24页珍藏版)》请在金锄头文库上搜索。

1、第六章,游标管理,2,回顾,PL/SQL 是一种可移植的高性能事务处理语言 PL/SQL 引擎驻留在 Oracle 服务器中 PL/SQL 块由声明部分、可执行部分和异常处理部分组成 PL/SQL 支持的数据类型包括标量数据类型、LOB 数据类型和属性类型 控制结构包括条件控制、循环控制和顺序控制 PL/SQL 支持动态 SQL 运行时出现的错误叫做异常 异常可以分为预定义异常和用户定义的异常,3,目标,掌握游标管理技巧,5,游标简介 2-2,逐行处理查询结果,以编程的方式访问数据 游标的类型:,隐式游标,REF 游标,显式游标,在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游

2、标。,显式游标用于处理返回多行的查询。,REF 游标用于处理运行时才能确定的动态 SQL 查询的结果,游标类型,6,隐式游标 4-1,在PL/SQL中使用DML语句时自动创建隐式游标 隐式游标自动声明、打开和关闭,其名为 SQL 通过检查隐式游标的属性可以获得最近执行的DML 语句的信息 隐式游标的属性有: %FOUND SQL 语句影响了一行或多行时为 TRUE %NOTFOUND SQL 语句没有影响任何行时为TRUE %ROWCOUNT SQL 语句影响的行数 %ISOPEN - 游标是否打开,始终为FALSE,7,隐式游标 4-2,SQL SET SERVEROUTPUT ON SQL

3、 BEGIN UPDATE toys SET toyprice=270 WHERE toyid= P005; IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE(表已更新); END IF; END; /,只有在 DML 语句影响一行 或多行时,才返回 True,8,隐式游标 4-3,SQL SET SERVEROUTPUT ON SQL DECLARE v_TOYID TOYS.ID%type := /,如果 DML 语句不影响任何行,则返回 True,9,隐式游标 4-4,SQL SET SERVEROUTPUT ON SQL BEGIN UPDATE vendo

4、r_master SET venname= Rob Mathew WHERE vencode=V004; DBMS_OUTPUT.PUT_LINE (SQL%ROWCOUNT); END; /,返回 DML 语句影响的行数,10,SELECT INTO 语句 2-1,SQL SET SERVEROUTPUT ON SQL DECLARE empid VARCHAR2(10); desig VARCHAR2(10); BEGIN empid:= /,如果没有与SELECT INTO语句中的条件匹配的行,将引发NO_DATA_FOUND异常,11,SELECT INTO 语句 2-2,SQL SE

5、T SERVEROUTPUT ON SQL DECLARE empid VARCHAR2(10); BEGIN SELECT empno INTO empid FROM employee; EXCEPTION WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE(该查询提取多行); END; /,如果 SELECT INTO 语句返回多个值, 将引发TOO_MANY_ROWS异常,12,显式游标 2-1,显式游标在 PL/SQL 块的声明部分定义查询,该查询可以返回多行 显式游标的操作过程:,数据库,打开游标,提取行,变量,关闭游标,13,显式游标 2-2,

6、SQLSET SERVER OUTPUT ON SQLDECLARE my_toy_price toys.toyprice%TYPE; CURSOR toy_cur IS SELECT toyprice FROM toys WHERE toyprice250; BEGIN OPEN toy_cur; LOOP FETCH toy_cur INTO my_toy_price; EXIT WHEN toy_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE (TOYPRICE=:玩具单价=:|my_toy_price); END LOOP; CLOSE toy_cur; END;

7、,声明游标,打开游标,提取行,关闭游标,14,带参数的显式游标,声明显式游标时可以带参数以提高灵活性 声明带参数的显式游标的语法如下: CURSOR ( ) IS select_statement;,SQL SET SERVEROUTPUT ON SQL DECLARE desig VARCHAR2(20); emp_code VARCHAR2(5); empnm VARCHAR2(20); CURSOR emp_cur(desigparam VARCHAR2) IS SELECT empno, ename FROM employee WHERE designation=desig; BEGI

8、N desig:= ,15,使用显式游标更新行 2-1,允许使用游标删除或更新活动集中的行 声明游标时必须使用 SELECT FOR UPDATE语句 CURSOR IS SELECT statement FOR UPDATE; UPDATE SET WHERE CURRENT OF ,更新的语法,DELETE FROM WHERE CURRENT OF ,删除的语法,16,使用显式游标更新行 2-2,SQL SET SERVEROUTPUT ON SQL DECLARE new_price NUMBER; CURSOR cur_toy IS SELECT toyprice FROM toys

9、 WHERE toyprice100 FOR UPDATE OF toyprice; BEGIN OPEN cur_toy; LOOP FETCH cur_toy INTO new_price; EXIT WHEN cur_toy%NOTFOUND; UPDATE toys SET toyprice = 1.1*new_price WHERE CURRENT OF cur_toy; END LOOP; CLOSE cur_toy; COMMIT; END;,17,循环游标 2-1,循环游标用于简化游标处理代码 当用户需要从游标中提取所有记录时使用 循环游标的语法如下:,FOR IN LOOP

10、END LOOP;,18,循环游标 2-2,SQL SET SERVER OUTPUT ON SQL DECLARE CURSOR mytoy_cur IS SELECT toyid, toyname, toyprice FROM toys; BEGIN FOR toy_rec IN mytoy_cur LOOP DBMS_OUTPUT.PUT_LINE( 玩具编号:| |toy_rec.toyid| |玩具名称:| |toy_rec.toyname| |玩具单价:| |toy_rec.toyprice); END LOOP; END;,19,REF 游标和游标变量 3-1,REF 游标和游标

11、变量用于处理运行时动态执行的 SQL 查询 创建游标变量需要两个步骤: 声明 REF 游标类型 声明 REF 游标类型的变量 用于声明 REF 游标类型的语法为: TYPE IS REF CURSOR RETURN ;,20,REF 游标和游标变量 3-2,TYPE my_curtype IS REF CURSOR RETURN stud_det%ROWTYPE; order_cur my_curtype;,声明强类型的 REF 游标,打开游标变量的语法如下: OPEN cursor_name FOR select_statement;,TYPE my_ctype IS REF CURSOR;

12、 stud_cur my_ctype;,声明弱类型的 REF 游标,21,REF 游标和游标变量 3-3,SQL DECLARE TYPE toys_curtype IS REF CURSOR RETURN toys%ROWTYPE; toys_curvar toys_curtype; toys_rec toys%ROWTYPE; BEGIN OPEN toys_curvar FOR SELECT * FROM toys; FETCH toys_curvar INTO toys_rec; . CLOSE toys_curvar; END;,声明REF游标类型,声明游标变量,22,游标变量的优点

13、和限制,游标变量的功能强大,可以简化数据处理。 游标变量的优点有: 可从不同的 SELECT 语句中提取结果集 可以作为过程的参数进行传递 可以引用游标的所有属性 可以进行赋值运算 使用游标变量的限制: 不能在程序包中声明游标变量 FOR UPDATE子句不能与游标变量一起使用 不能使用比较运算符,23,使用游标变量执行动态 SQL,可以使用游标变量执行动态构造的 SQL 语句 打开执行动态 SQL 的游标变量的语如下: OPEN cursor_name FOR dynamic_sqlstring USING bind_argument_list;,DECLARE r_emp emp%ROWT

14、YPE; TYPE c_type IS REF CURSOR; cur c_type; p_salary NUMBER; BEGIN p_salary := 2500; OPEN cur FOR select * from emp where sal:1 order by sal desc USING p_salary; DBMS_OUTPUT.PUT_LINE(薪水大于| p_salary |的员工有:); LOOP FETCH cur INTO r_emp; EXIT WHEN cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE(编号:| r_emp.empno | 姓名: | r_emp.ename| 薪水: | r_emp.sal ); END LOOP; CLOSE cur; END;,24,总结,游标用于处理查询结果集中的数据 游标类型有:隐式游标、显式游标和 REF 游标 隐式游标由 PL/SQL 自动定义、打开和关闭 显式游标用于处理返回多行的查询 显式游标可以删除和更新活动集中的行 要处理结果集中所有记录时,可使用循环游标 在声明 REF 游标时,不需要将 SELECT 语句与 其关联,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号