plsql中的游标

上传人:第*** 文档编号:51730174 上传时间:2018-08-16 格式:PPT 页数:36 大小:408.50KB
返回 下载 相关 举报
plsql中的游标_第1页
第1页 / 共36页
plsql中的游标_第2页
第2页 / 共36页
plsql中的游标_第3页
第3页 / 共36页
plsql中的游标_第4页
第4页 / 共36页
plsql中的游标_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《plsql中的游标》由会员分享,可在线阅读,更多相关《plsql中的游标(36页珍藏版)》请在金锄头文库上搜索。

1、3Copyright Oracle Corporation, 2001. All rights reserved.PL/SQL中的游标 1-2Copyright Oracle Corporation, 2001. All rights reserved.游标的概念在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现。 为了处理 SQL 语句,ORACLE 必须分配一片叫上下文( context area ) 的区域来处理所必需的信息,其中包括要处理的行的数目,一个指向语 句被分析以后的表示形式的指针以及查询的活动集(active set)。游标是一个指向上下文的句柄( handl

2、e)或指针。通过游标,PL/SQL可 以控制上下文区和处理语句时上下文区会发生些什么事情。 1-3Copyright Oracle Corporation, 2001. All rights reserved.游标的概念对于不同的SQL语句,游标的使用情况不同: SQL语句游标 非查询语句 隐式的 结果是单行的查询语句 隐式的或显示的 结果是多行的查询语句 显示的1-4Copyright Oracle Corporation, 2001. All rights reserved.显式游标 处理显式游标需要四个 PL/SQL步骤: 定义游标:就是定义一个游标名,以及与其相对应 的SELECT 语

3、句 , 其 一般形式为:CURSOR cursor_name IS select_statement; 其中: 游标声明部分是唯一可以出现在模块声明部分的步骤,其他三个步 骤都在执行或异常处理部分中 游标名是标识符,所以也有作用域,并且必须在使用前进行说明 任何SELECT语句都是合法的,但是SELECT INTO语句是非法的 在声明部分的末尾声明游标1-5Copyright Oracle Corporation, 2001. All rights reserved.显式游标 处理显式游标需要四个 PL/SQL步骤: 打开游标:就是执行游标所对应的SELECT语句, 将其查询结果放入工作区,并

4、且指针 指向工作区的首部,标识游标结果集合。 其中: PL/SQL 程序不能用OPEN 语句重复打开同一个游标OPEN cursor_name 1-6Copyright Oracle Corporation, 2001. All rights reserved.显式游标 处理显式游标需要四个 PL/SQL步骤: 提取游标:就是检索结果集合中的数据行,放入指 定的输出变量中。FETCH cursor_name INTO variable_list | record_variable ; 1-7Copyright Oracle Corporation, 2001. All rights reser

5、ved.显式游标 处理显式游标需要四个 PL/SQL步骤: 关闭游标:当提取和处理完游标结果集合数据后, 应及时关闭游标,以释放该游标所占用的系统资源 ,并使该游标的工作区变成无效,不能再使用 FETCH 语句取其中数据。关闭后的游标可以使用 OPEN 语句重新打开。 CLOSE cursor_name;1-8Copyright Oracle Corporation, 2001. All rights reserved.显式游标 例:查询前10名员工的信息。 DECLAREv_ename emp.ename%TYPE;v_sal emp.sal%TYPE;CURSOR c_cursor IS

6、SELECT ename, sal FROM emp WHERE rownum= P_sal; BEGIN OPEN c_cursor(1000); FETCH c_cursor INTO v_ename, v_sal; WHILE c_cursor %FOUND LOOPDBMS_OUTPUT.PUT_LINE(v_ename|-|to_char(v_sal) );FETCH c_cursor INTO v_ename, v_sal; END LOOP; CLOSE c_cursor; END; 1-10Copyright Oracle Corporation, 2001. All righ

7、ts reserved.游标属性 属性描述%FOUND 布尔型属性,当最近一次读记录时 成功返回,则值为TRUE; %NOTFOUND 布尔型属性,与%FOUND相反 %ISOPEN 布尔型属性,当游标已打开时返回 TRUE; %ROWCOUNT 数字型属性,返回已从游标中读取 的记录数。 1-11Copyright Oracle Corporation, 2001. All rights reserved.游标属性 DECLATECURSOR C_cursor is BEGINOPEN C_cursorFETCH C_cursor INTO FETCH C_cursor INTO FETCH

8、 C_cursor INTO CLOSE C_cursorEND;%FOUND返回错误%FOUND为NULL%FOUND为TRUE%FOUND为TRUE%FOUND返回错误%FOUND为FALSE1-12Copyright Oracle Corporation, 2001. All rights reserved.游标属性 DECLATECURSOR C_cursor is BEGINOPEN C_cursorFETCH C_cursor INTO FETCH C_cursor INTO FETCH C_cursor INTO CLOSE C_cursorEND;%NOTFOUND返回错误%N

9、OTFOUND为NULL%NOTFOUND为FALSE%NOTFOUND为FALSE%NOTFOUND返回错误%NOTFOUND为TRUE1-13Copyright Oracle Corporation, 2001. All rights reserved.游标属性 DECLATECURSOR C_cursor is BEGINOPEN C_cursorFETCH C_cursor INTO FETCH C_cursor INTO FETCH C_cursor INTO CLOSE C_cursorEND;%ISOPEN为FALSE%ISOPEN为TRUE%ISOPEN为TRUE%ISOPEN

10、为TRUE%ISOPEN为FALSE%ISOPEN为TRUE1-14Copyright Oracle Corporation, 2001. All rights reserved.游标属性 DECLATECURSOR C_cursor is BEGINOPEN C_cursorFETCH C_cursor INTO FETCH C_cursor INTO FETCH C_cursor INTO CLOSE C_cursorEND;%ROWCOUNT返回错误%ROWCOUNT为0%ROWCOUNT为1%ROWCOUNT为2%ROWCOUNT返回错误%ROWCOUNT为2练习:给工资低于1200

11、的员工增加工资50。1-15Copyright Oracle Corporation, 2001. All rights reserved.处理隐式游标 显式游标主要是用于对查询语句的处理,尤其是在 查询结果为多条记录的情况下;而对于非查询语句 ,如修改、删除操作,则由ORACLE 系统自动地为这 些操作设置游标并创建其工作区,这些由系统隐含 创建的游标称为隐式游标,隐式游标的名字为SQL, 这是由ORACLE 系统定义的。对于隐式游标的操作, 如定义、打开、取值及关闭操作,都由ORACLE 系统 自动地完成,无需用户进行处理。用户只能通过隐 式游标的相关属性,来完成相应的操作。在隐式游 标的

12、工作区中,所存放的数据是与用户自定义的显 示游标无关的、最新处理的一条SQL 语句所包含的 数据。 INSERT, UPDATE, DELETE, SELECT INTO语句中不必 明确定义游标 1-16Copyright Oracle Corporation, 2001. All rights reserved.隐式游标属性 属性描述 %FOUND 布尔型属性,至少有一行被 INSERT,DELETE或UPDATE时返回 TRUE。 %NOTFOUND 布尔型属性,与%FOUND相反; %ISOPEN 布尔型属性, 取值总是FALSE。 SQL命令执行完毕立即关闭隐式游 标。%ROWCOUN

13、T 数字型属性, 返回已从游标中读 取得记录数;1-17Copyright Oracle Corporation, 2001. All rights reserved.处理隐式游标 例:删除EMP 表中20号部门的所有员工,如果该部门 中已没有员工可删除,则在DEPT 表中删除该部门 DECLARE V_deptno emp.deptno%TYPE :=20; BEGIN DELETE FROM emp WHERE deptno=v_deptno; IF SQL%NOTFOUND THEN DELETE FROM dept WHERE deptno= 20; END IF; END; 1-18

14、Copyright Oracle Corporation, 2001. All rights reserved.游标检索循环 例:DECLAREv_empno emp.empno%TYPE;v_sal emp.sal%TYPE;CURSOR c_cursor IS SELECT empno, sal FROM emp; BEGINOPEN c_cursor;LOOPFETCH c_cursor INTO v_empno, v_sal;EXIT WHEN c_cursor %NOTFOUND; IF v_sal=1200 THENUPDATE emp SET sal=sal+50 WHERE e

15、mpno=v_empno;DBMS_OUTPUT.PUT_LINE(编码为|v_empno|工资已更新!);END IF;DBMS_OUTPUT.PUT_LINE(记录数:| c_cursor %ROWCOUNT);END LOOP;CLOSE c_cursor; END; 1-19Copyright Oracle Corporation, 2001. All rights reserved.游标的FOR循环 PL/SQL语言提供了游标FOR循环语句,自动执行游标的OPEN、FETCH、 CLOSE语句和循环语句的功能;当进入循环时,游标FOR循环语句自动打开 游标,并提取第一行游标数据,当程

16、序处理完当前所提取的数据而进入下 一次循环时,游标FOR循环语句自动提取下一行数据供程序处理,当提取 完结果集合中的所有数据行后结束循环,并自动关闭游标。 FOR index_variable IN cursor_namevalue, value LOOP - 游标数据处理代码 END LOOP; 1-20Copyright Oracle Corporation, 2001. All rights reserved.游标的FOR循环 其中:index_variable为游标FOR 循环语句隐含声明的索引变量,该变量为 记录变量,其结构与游标查询语句返回的结构集合的结构相同。在程 序中可以通过引用该索引记录变量元素来读取所提取的游标数据, index_variable中各元素的名称与游标查询语句选择

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

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