一、游标
游标-----内存中的一块区域,存放的是select 的结果。
游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。
二、游标类别
游标包括显式游标和隐式游标。
1、显式游标
显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。
在PL/SQL中处理显示游标所必需的四个步骤:
1)声明游标;CURSOR cursor_name IS select_statement
2)为查询打开游标;OPEN cursor_name
3)取得结果放入PL/SQL变量中;
FETCH cursor_name INTO list_of_variables;
FETCH cursor_name INTO PL/SQL_record;
4)关闭游标。CLOSE cursor_name
注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。
2、隐式游标
在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标,名字固定叫sql。
在PL/SQL中使用DML语句时自动创建隐式游标
隐式游标自动声明、打开和关闭,其名为 SQL
通过检查隐式游标的属性可以获得最近执行的DML 语句的信息
隐式游标的属性有:
%FOUND – SQL 语句影响了一行或多行时为 TRUE
%NOTFOUND – SQL 语句没有影响任何行时为TRUE
%ROWCOUNT – SQL 语句影响的行数
%ISOPEN - 游标是否打开,始终为FALSE
三、游标属性
Oracle 游标有4个属性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。
%ISOPEN判断游标是否被打开,如果打开%ISOPEN等于true,否则等于false;
%FOUND %NOTFOUND判断游标所在的行是否有效,如果有效,则%FOUNDD等于true,否则等于false;
%ROWCOUNT返回当前位置为止游标读取的记录行数。
--游标声明 cursor cursor_name is select_statement ------------------------------------------------------------------------------------------- --For 循环游标 --(1)定义游标 --(2)定义游标变量 --(3)使用for循环来使用这个游标 declare cursor c_user is select * from tuser order by id asc; --定义一个游标变量v_row c_user%ROWTYPE ,该类型为游标c_user中的一行数据类型 c_row c_user%rowtype; begin for c_row in c_user loop dbms_output.put_line(c_row.id||' name '||c_row.name); end loop; end; ----------------------------------------------------------------------------------------------- --Fetch游标 --使用的时候必须要明确的打开和关闭 declare cursor c_user is select * from tuser order by id asc; c_row c_user%rowtype; begin open c_user; loop --提取一行数据到c_row fetch c_user into c_row; --判读是否提取到值,没取到值就退出 --取到值c_job%notfound 是false --取不到值c_job%notfound 是true exit when c_user%notfound; dbms_output.put_line(c_row.id||' name '||c_row.name); end loop; close c_user; end; -------------------------------------------------------------------------------------- --参数游标(for方式) declare cursor c_role(p_roleid varchar2) is select u.id id,u.name name,u.address address,r.roleid roleid,r.name rolename from tuser u,trole r where u.roleid=r.roleid and r.roleid=p_roleid; --必须定义别名 c_row c_role%rowtype; begin for c_row in c_role('1') loop dbms_output.put_line(c_role%rowcount||' '||c_row.id||' '||c_row.rolename); end loop; end; --------------------------------------------------------------------------------------- --参数游标(fetch方式) declare cursor c_role(p_roleid varchar2) is select u.id id,u.name name,u.address address,r.roleid roleid,r.name rolename from tuser u,trole r where u.roleid=r.roleid and r.roleid=p_roleid; --必须定义别名 c_row c_role%rowtype; begin open c_role('1'); loop fetch c_role into c_row; exit when c_role%notfound; dbms_output.put_line(c_role%rowcount||' '||c_row.id||' '||c_row.rolename); end loop; close c_role; end; ---------------------------------------------------------------------------------------- --更新操作 declare cursor c_user_update is select * from tuser for update of tuser.id; c_row c_user_update%rowtype; --定义一个变量,类型与表中指定字段的类型一致 c_name tuser.name%TYPE; begin for c_row in c_user_update loop if c_row.name='name' then c_name:=c_row.name||'---'; dbms_output.put_line(c_name); end if; update tuser set name=c_name where CURRENT OF c_user_update; end loop; end;
参考:http://www.2cto.com/database/201501/371435.html
http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html
相关推荐
oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结
Oracle游标的一般使用
oracle游标使用大全,详细描述了如何使用游标,创建游标等等
ORACLE 游标使用示例,给大家可以共享一下。
Oracle游标使用方法及语法大全.doc
详细的oracle游标用法,简单易懂,是学习游标的好材料
oracle 游标FOR循环
Oracle游标使用方法及语法大全
oracle游标 详解 精析 示例 真正能把游标讲透、说全、调理清晰的讲义。 游标犹如C语言的指针:灵活、实用、高效。 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。 游标是一个通过定义...
oracle游标优化以及oracle游标的作用和游标的概念。
oracle游标使用大全,其中有很多例子,有助于大家理解,希望对初学者有帮助
详细介绍了 oracle的游标使用 及 实例
Oracle 游标! 值得下载看看!资源免费,大家分享!!
关于游标使用问题的练习附答案。游标分隐式和显示游标;动态和ref游标。。。
游标是存储过程最基本的要会的,用于访问 ORACLE 数据库的 DDL 和 TCL 语
主要描述oracle中游标的学习隐式游标和显示游标
该资源系本人培训期间的关于ORCL 游标所有实用案例,在此共享希望对大家学习有所帮助
我自己编写的oracle游标案例,希望对大家有点帮助!