游标

什么是游标

  • 用来存储多条查询数据的一种数据结构('结果集'),
    *它有一个 '指针',从上往下移动('fetch'),从而能够 '遍历每条记录'对于处理多行记录的事务经常使用游标来实现。

基本写法

-- 测试基础数据
create table Z(
    id int(4);
    a varchar2(8);
    b varchar2(8);
);
-- 创建存储过程 
declare 
  -- 声明游标
  cursor cur
  is
  select * from Z;
  c_row cur%rowtype;
  i integer;
begin
  -- 开启游标
  open cur;
  loop
  --提取一行到游标内,获取数据;
  fetch cur into c_row;
   --判读是否提取到值,没取到值就退出
   --取到值c_job%notfound 是false 
   --取不到值c_job%notfound 是true
   exit when cur%notfound;
   dbms_output.put_line(c_row.id||'-'||c_row.a||'-'||c_row.b);
   end loop;
   --关闭游标
   close cur;
end;

游标的属性

  • 属性 返回值类型 作用
  • sql%isopen 布尔型 判断游标是否 '开启'
  • sql%found 布尔型 判断游标是否 '获取' 到值
  • sql%notfound 布尔型 判断游标是否 '没有获取' 到值(常用于 "退出循环")
  • sql%rowcount 整型 '当前' 成功执行的数据行数(非 "总记录数")

例子:

-- Created on 2022-05-16 by ADMINISTRATOR 
declare 
   --创建游标
   cursor c_Z is select a,b from Z;
   --创建接收游标的变量
   c_a Z.a%type;
   c_b Z.b%type;
begin
   --打开游标
   open c_Z;
   --循环游标
   loop
   fetch c_Z into c_a,c_b;
   --关闭条件
   exit when c_Z%notfound;
   --输出游标
   dbms_output.put_line(c_a||'-'||c_b);
   --关闭游标
   end loop;
   close c_Z;
   
end;
posted @   景伟·郭  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示