PL/SQL(八):编写游标
来源:互联网 发布:国外p图软件 编辑:程序博客网 时间:2024/06/07 23:59
一、游标
是Oracle系统在内存中开辟的一个工作区,在其中存放select语句返回的查询结果。
二、游标分类
1)PL/SQL隐式建立并自动管理这一游标
2)隐式游标属性
SQL%ROWCOUNT 返回最近一条SQL语句所影响到的记录的数量(整数型)
SQL%FOUND 布尔型属性,当游标或游标变量被打开但是在执行FETCH语
句之前时, %FOUND是NULL。其后,如果最后的FETCH语句
返回一行或多行记录,则%FOUND为TRUE,如果FETCH语句
没有返回记录,则%FOUND为FALSE。
SQL%NOTFOUND 布尔型属性,当游标或游标变量被打开但是在执行FETCH语
句之前时, %NOTFOUND是NULL。其后,如果最后的
FETCH语句返回一行记录,则%NOTFOUND为FALSE,如果
FETCH语句没有返回记录,则%NOTFOUND为TRUE。
SQL%ISOPEN 当游标或游标变量被打开时,为TRUE;否则为FALSE
2、显示游标
由用户显式声明,查询返回多行记录要访问查询结果的所有记录,可以通过fetch语句,进行指针的移动来实现
使用游标进行操作,包括定义游标、打开游标、提取数据、关闭游标四步。
不能对游标赋值,也不能在表达式中使用游标名
%ISOPEN 布尔如果游标是打开的,其值为TRUE
%NOTFOUND 布尔如果FETCH 语句没有返回记录,其值为TRUE
%FOUND 布尔如果FETCH 语句返回一行记录,其值为TRUE; 与%NOTFOUND相反
%ROWCOUNT 数量返回迄今为止已经从游标中取出的记录数目
三、游标处理
2、游标指针只能向下移动,不能回退
3、将提取的行值存入一个PL/SQL record 中能方便地处理活动集中的行
四、示例代码
4.1 隐式游标
begin for temp in (select * from T_SCORE where STU_ID='1000') loop dbms_output.put_line(temp.exam_score); end loop; dbms_output.put_line('*************'); update T_SCORE set T_SCORE.EXAM_SCORE = 88.8 where STU_ID='1000'; dbms_output.put_line(sql%rowcount); --最近执行的SQL影响的行数。查询是不影响的 end;
4.2 显示游标的标准写法
--1)loop方式declare --1.1 定义游标 cursor t_score_cur is select * from T_SCORE where STU_ID = '1001'; score_row T_SCORE%rowtype;begin if t_score_cur%isopen then --未打开,不执行 dbms_output.put_line('1游标已经打开'); end if; --1.2 打开游标 open t_score_cur ; --1.3 读取行记录,先fetch 在读取单行记录 loop fetch t_score_cur into score_row ; exit when t_score_cur%notfound; dbms_output.put_line(score_row.STU_ID); dbms_output.put_line(score_row.EXAM_SCORE); end loop; --1.4 关闭游标 close t_score_cur;end;--2)whle 方式declare cursor t_score_cur is select * from T_SCORE where STU_ID = '1001'; score_row T_SCORE%rowtype;begin open t_score_cur; fetch t_score_cur into score_row; while(t_score_cur%found) loop --t_score_cur 有值 继续循环 dbms_output.put_line(score_row.STU_ID); dbms_output.put_line(score_row.EXAM_SCORE); fetch t_score_cur into score_row; end loop; close t_score_cur;end;
4.3 显示游标的常规写法
declare cursor t_score_cur is select * from T_SCORE where STU_ID = '1001';begin for temp in t_score_cur loop dbms_output.put_line(temp.STU_ID); dbms_output.put_line(temp.EXAM_SCORE); end loop; --再次打开游标 for temp in t_score_cur loop dbms_output.put_line(temp.STU_ID); dbms_output.put_line(temp.EXAM_SCORE); end loop;end;
4.4 带参数的游标
declare cursor t_score_cur is select * from T_SCORE where STU_ID = &stuId;begin for temp in t_score_cur loop dbms_output.put_line(temp.STU_ID); dbms_output.put_line(temp.EXAM_SCORE); end loop; end;--2 带参方式二declare cursor t_score_cur( stuId T_SCORE.STU_ID%type ) is select * from T_SCORE where STU_ID = stuId;begin for temp in t_score_cur(&stuId) loop dbms_output.put_line(temp.STU_ID); dbms_output.put_line(temp.EXAM_SCORE); end loop;end;--3 显示开/关游标declare cursor t_score_cur(stuId T_SCORE.STU_ID%type) is select * from T_SCORE where T_SCORE.STU_ID = stuId; t_score_row T_SCORE%rowtype; begin open t_score_cur('1001'); loop fetch t_score_cur into t_score_row; exit when t_score_cur%notfound; dbms_output.put_line(t_score_row.STU_ID); dbms_output.put_line(t_score_row.EXAM_SCORE); end loop; close t_score_cur; dbms_output.put_line('---------------'); open t_score_cur('1000'); loop fetch t_score_cur into t_score_row; exit when t_score_cur%notfound; dbms_output.put_line(t_score_row.STU_ID); dbms_output.put_line(t_score_row.EXAM_SCORE); end loop; end;
阅读全文
0 0
- PL/SQL(八):编写游标
- PL/SQL(八):编写游标
- PL/SQL游标
- PL/SQL中的游标
- PL/SQL游标
- Oracle PL/SQL游标
- PL/SQL:游标
- PL/SQL游标总结
- 初学PL/SQL 游标
- PL/SQL游标描述
- PL/SQL --> 游标
- PL/SQL游标使用
- PL/SQL 游标变量
- pl/sql游标
- PL/SQL 游标变量
- PL/SQL游标
- PL/SQL游标使用
- PL/SQL游标使用
- Collection接口之List子接口详解
- 理解Python并发编程-PoolExecutor篇
- HBASE
- 支付架构
- Mysql的源码安装部署
- PL/SQL(八):编写游标
- Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image
- Nvidia DIGITS网页版深度学习框架——深度学习版SPSS
- 科普文章-另一个视角解读计算机编码(修订版)
- 视觉三维建模
- JavaScript 第一节 变量
- EasyUI学习总结(一)——EasyUI入门
- 周星驰成名前的故事
- Linux 虚拟文件系统