Oracle中的游标

Oracle游标
概念:内存中的一块区域,存放select结果
游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。
一、显示游标(处理返回多行数据的SELECT 语句)

  • 声明游标;CURSOR cursor_name IS select_statement
  • 为查询打开游标;OPEN cursor_name
  • 取得结果放入PL/SQL变量中;
 FETCH cursor_name INTO list_of_variables;
FETCH cursor_name INTO PL/SQL_record;
  • 关闭游标CLOSE cursor_name

二、隐式游标(所有的隐式游标都被假设为只返回一条记录。)
使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。

 SELECT studentNo,studentName
INTO curStudentNo,curStudentName
FROM StudentRecord
WHERE name=’gg’;

上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值
特点:

  • 隐式游标是单条sql语句所产生的结果集合
  • 多条sql语句,隐式游标指向最后一条sql语句的结果
  • 主要用在update和delete上

三、实际操作游标
1、for循环游标
(1)定义游标
(2)定义游标变量
(3)使用for循环来使用这个游标
四、游标的四个属性

  • %notfound fetch是否提到数据 没有true 提到false
  • %found fetch是否提到数据 有true 没提到false
  • %rowcount 已经取出的记录的条数
  • %isopen 布尔值 游标是否打开

小细节:
1、区别
%TYPE 声明一个列类型
%ROWTYPE 声明一个行类型
好处:更改了列、行的长度或者数据类型,会自动进行调整
2、游标和游标变量区别
oracle游标只是数据库中一个命名的工作区,当游标声明后,就与一个固定的sql关联
游标变量可以与不同的SQL语句关联,在运行时取不同的sql语句,指向不同的工作区
3、oracle中的弱游标有返回值,而且必须是%rowtype类型,而强游标无返回值
4、exit when语句一定要紧跟在fetch之后。必避免多余的数据处理

五、实际代码

简单的游标查询

 --声明游标并且赋值(通过sql语句)
declare
cursor retail is select * from retailretnotice;
--声明游标变量
sheet_cur retailretnotice%rowtype;
--开始for循环
begin
--开始循环
open retail;
--开启游标
loop
--开启循环
exit when retail%notfound;
--当游标没有提到数据,退出
fetch retail into sheet_cur;
--循环游标(使用fetch游标,必须明确的打开和关闭)
dbms_output.put_line(sheet_cur.sheetid);
--输出数据
end loop;
--结束循环
--关闭游标
close retail;
end;

在Oracle中,有更简洁的方法

 begin
for R in (select * from retailretnotice)
loop
dbms_output.put_line(R.sheetid);
end loop;
end;

for循环游标
1、声明游标(并且赋值)
2、声明游标变量
3、进行for循环输出

上一篇:Semantic-UI和其他几个前端框架


下一篇:Java 必须掌握的 12 种 Spring 常用注解!