• / 25
  • 下载费用:10 金币  

oracle学习第六讲-游标管理.pptx

关 键 词:
oracle 学习 第六 游标 管理
资源描述:
第六章,游标管理,回顾,PL/SQL 是一种可移植的高性能事务处理语言 PL/SQL 引擎驻留在 Oracle 服务器中PL/SQL 块由声明部分、可执行部分和异常处理部分组成 PL/SQL 支持的数据类型包括标量数据类型、LOB 数据类型和属性类型 控制结构包括条件控制、循环控制和顺序控制PL/SQL 支持动态 SQL运行时出现的错误叫做异常异常可以分为预定义异常和用户定义的异常,2,目标,掌握游标管理技巧(重点),3,专业英语,Cursor指针Immediate直接的, 紧接的,立即的, 知觉的,4,游标简介 2-1,5,执行 PL/SQL 程序,内存单元,保存到游标中,,一次处理一行,,检索行,提取行,游标简介 2-2,逐行处理查询结果,以编程的方式访问数据游标的类型:,6,隐式游标,REF 游标,显式游标,,,,,,在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标。,显式游标用于处理返回多行的查询。,REF 游标用于处理运行时才能确定的动态 SQL 查询的结果,游标类型,隐式游标 4-1,在PL/SQL中使用DML语句时自动创建隐式游标隐式游标自动声明、打开和关闭,其名为 SQL通过检查隐式游标的属性可以获得最近执行的DML 语句的信息隐式游标的属性有:%FOUND – SQL 语句影响了一行或多行时为 TRUE%NOTFOUND – SQL 语句没有影响任何行时为TRUE%ROWCOUNT – SQL 语句影响的行数%ISOPEN - 游标是否打开,始终为FALSE,7,隐式游标 4-2,8,SQL> SET SERVEROUTPUT ONSQL> BEGINUPDATE toys SET toyprice=270WHERE toyid= 'P005';IF SQL%FOUND THENDBMS_OUTPUT.PUT_LINE(‘表已更新');END IF; END;/,,只有在 DML 语句影响一行或多行时,才返回 True,隐式游标 4-3,9,SQL> SET SERVEROUTPUT ONSQL> DECLARE v_TOYID TOYS.ID%type := '/,,如果 DML 语句不影响任何行,则返回 True,隐式游标 4-4,10,SQL> SET SERVEROUTPUT ON SQL> BEGINUPDATE vendor_masterSET venname= 'Rob Mathew'WHERE vencode='V004';DBMS_OUTPUT.PUT_LINE (SQL%ROWCOUNT); END; /,,返回 DML 语句影响的行数,SELECT INTO 语句 2-1,11,SQL> SET SERVEROUTPUT ONSQL> DECLARE empid VARCHAR2(10);desig VARCHAR2(10); BEGINempid:= ' /,,如果没有与SELECT INTO语句中的条件匹配的行,将引发NO_DATA_FOUND异常,SELECT INTO 语句 2-2,12,SQL> SET SERVEROUTPUT ONSQL> DECLARE empid VARCHAR2(10); BEGINSELECT empno INTO empid FROM employee; EXCEPTIONWHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('该查询提取多行'); END; /,,如果 SELECT INTO 语句返回多个值,将引发TOO_MANY_ROWS异常,显式游标 2-1,显式游标在 PL/SQL 块的声明部分定义查询,该查询可以返回多行显式游标的操作过程:,13,数据库,,打开游标,提取行,变量,关闭游标,,显式游标 2-2,14,SQL>SET SERVER OUTPUT ONSQL>DECLARE my_toy_price toys.toyprice%TYPE; CURSOR toy_cur IS SELECT toyprice FROM toys WHERE toyprice<250; 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;,,声明游标,,打开游标,,提取行,,关闭游标,带参数的显式游标,声明显式游标时可以带参数以提高灵活性声明带参数的显式游标的语法如下:CURSOR ( ) IS select_statement;,15,SQL> SET SERVEROUTPUT ONSQL> DECLAREdesig VARCHAR2(20);emp_code VARCHAR2(5);empnm VARCHAR2(20);CURSOR emp_cur(desigparam VARCHAR2) IS SELECT empno, ename FROM employee WHERE designation=desig; BEGINdesig:= ',,,使用显式游标更新行 2-1,允许使用游标删除或更新活动集中的行声明游标时必须使用 SELECT … FOR UPDATE语句 CURSOR IS SELECT statement FOR UPDATE;UPDATE SET WHERE CURRENT OF ,16,更新的语法,DELETE FROM WHERE CURRENT OF ,删除的语法,使用显式游标更新行 2-2,17,SQL> SET SERVEROUTPUT ONSQL> DECLARE new_price NUMBER; CURSOR cur_toy IS SELECT toyprice FROM toys WHERE toyprice<100 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;,,,循环游标 2-1,循环游标用于简化游标处理代码当用户需要从游标中提取所有记录时使用循环游标的语法如下:,18,FOR IN LOOPEND LOOP;,循环游标 2-2,19,SQL> SET SERVER OUTPUT ONSQL> 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;,,REF 游标和游标变量 3-1,REF 游标和游标变量用于处理运行时动态执行的 SQL 查询创建游标变量需要两个步骤:声明 REF 游标类型声明 REF 游标类型的变量用于声明 REF 游标类型的语法为:TYPE IS REF CURSOR[RETURN ];,20,REF 游标和游标变量 3-2,打开游标变量的语法如下: OPEN cursor_name FOR select_statement;,21,TYPE my_curtype IS REF CURSOR RETURN stud_det%ROWTYPE;order_cur my_curtype;,声明强类型的 REF 游标,,TYPE my_ctype IS REF CURSOR;stud_cur my_ctype;,声明弱类型的 REF 游标,REF 游标和游标变量 3-3,22,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游标类型,,声明游标变量,游标变量的优点和限制,游标变量的功能强大,可以简化数据处理。游标变量的优点有:可从不同的 SELECT 语句中提取结果集可以作为过程的参数进行传递可以引用游标的所有属性可以进行赋值运算使用游标变量的限制:不能在程序包中声明游标变量FOR UPDATE子句不能与游标变量一起使用不能使用比较运算符,23,使用游标变量执行动态 SQL,可以使用游标变量执行动态构造的 SQL 语句打开执行动态 SQL 的游标变量的语如下: OPEN cursor_name FOR dynamic_sqlstring [USING bind_argument_list];,24,DECLARE r_emp emp%ROWTYPE; 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;,,总结,游标用于处理查询结果集中的数据游标类型有:隐式游标、显式游标和 REF 游标隐式游标由 PL/SQL 自动定义、打开和关闭显式游标用于处理返回多行的查询显式游标可以删除和更新活动集中的行要处理结果集中所有记录时,可使用循环游标在声明 REF 游标时,不需要将 SELECT 语句与 其关联,25,
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:oracle学习第六讲-游标管理.pptx
链接地址:https://www.maidoc.com/p-1603.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 


收起
展开