首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle11g全新讲解之游标

Oracle11g全新讲解之游标

作者头像
用户4919348
发布于 2023-05-27 06:22:53
发布于 2023-05-27 06:22:53
54300
代码可运行
举报
文章被收录于专栏:波波烤鸭波波烤鸭
运行总次数:0
代码可运行

游标

游标的作用:处理多行数据,类似与java中的集合

1.隐式游标

  一般是配合显示游标去使用的,不需要显示声明,打开,关闭,系统自定维护,名称为:sql

常用属性:

  • sql%found:语句影响了一行或者多行时为true
  • %NOTFOUND:语句没有任何影响的时候为true
  • %ROWCOUNT:语句影响的行数
  • %ISOPEN:游标是否打开,始终为false

案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
begin
           update t_student set age=20 ;
  
           if sql%found then
               dbms_output.put_line('修改成功,共修改了   ' ||  sql%rowcount  || '   条记录');
             else
                 dbms_output.put_line('没有这个学生');
             end if;
   
            -- commit ;-- 提交应该要放在隐式游标后面
        end ; 

2.显示游标

  显式游标在PL/SQL块的声明部分定义查询,该查询可以返回多行,处理多行数据

实现步骤:

  1. 声明一个游标
  2. 打开游标
  3. 循环提取数据
  4. 关闭游标

案例:

a) 无参数 :查询所有学生信息,并显示出学生姓名,性别,年龄

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 步骤:1.声明一个游标  2.打开游标  3.循环提取数据 4.关闭游标
-- 查询所有的学生信息。并且显示学生的姓名,年龄和性别
declare
   v_row t_student%rowtype;
   -- 1.游标的声明
   cursor mycursor is select * from t_student ;
begin
    -- 2.打开游标
    open mycursor;
  
    -- 3.循环提取数据
    loop
        fetch mycursor into v_row;
        -- 找到出口
        exit when mycursor%notfound;
        dbms_output.put_line(v_row.name||'-'||v_row.gender||'-'||v_row.age);
    end loop;
    -- 4.关闭游标
    close mycursor;
end;

b) 有参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
          v_sex varchar2(4) :='&请输入性别' ;
           v_row t_student%rowtype ;
           cursor mycursor(p_sex varchar2) is select * from t_student where sex=p_sex ; -- 注:参数的类型不要指定长度大小
        begin
           open mycursor(v_sex) ;-- 2、打开游标
           loop
               fetch mycursor into v_row;
                  exit when mycursor%notfound;
               dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
   
           end loop; 
           close mycursor;--  4、 关闭游标
        end ;   

c ) 循环游标. 简化 游标 for:不需要打开游标 也不需要关闭游标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
          v_sex varchar2(4) :='&请输入性别' ;
           cursor mycursor(p_sex varchar2) is select * from t_student where sex=p_sex ; -- 注:参数的类型不要指定长度大小
        begin
   
          for v_row   in  mycursor(v_sex)    loop
               dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);  
           end loop; 
   
        end ;   

d) 使用显式游标更新行:

允许使用游标删除或更新活动集中的行,声明游标时必须使用 select … for update 语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
          v_sex varchar2(4) :='&请输入性别' ;
           v_row t_student%rowtype ;
           cursor mycursor(p_sex varchar2) is select * from t_student where sex=p_sex  for update; -- 注:参数的类型不要指定长度大小
        begin
           open mycursor(v_sex) ;-- 2、打开游标
           loop
               fetch mycursor into v_row;
                  exit when mycursor%notfound;
              -- dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
   
               update t_student set age = age +10 where current of mycursor;
   
           end loop; 
           --commit ;
           close mycursor;--  4、 关闭游标
        end ;   

3.REF游标

  处理运行时动态执行的 SQL 查询,特点:

优点:

  1. 动态SQL语句
  2. 在存储过程中可以当参数

缺点:

  1. 不能使用循环游标for
  2. 不能使用游标更新行

使用步骤:

  1. 定义一个ref的类型
  2. 声明游标
  3. 打开游标
  4. 提取数据
  5. 关闭游标

案例讲解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
         v_sex varchar2(4) ;
       --type mytype is ref cursor return t_student%rowtype; -- 强类型的 ref 游标类型
         type mytype is ref cursor  ;   --  1)弱类型的 ref 游标类型
         mycursor mytype;   --  2) 声明游标
         v_sql varchar2(100) ;
         v_row t_student%rowtype ;
     begin
         v_sql :=' select * from t_student ' ;
  
        -- open mycursor for select * from t_student; 
         open mycursor for v_sql ;
         loop
             fetch mycursor into v_row ;
             exit when mycursor%notfound ;
             dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
         end loop;
         close mycursor ;  
   
     end ;

可以使用sys_refcursor类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare
         v_stuname t_student.stuname%type :='&请输入名字' ;
           v_sex varchar2(3) :='&请输入性别' ;
  
         mycursor  sys_refcursor ;   --  2) 声明游标
         v_sql varchar2(100) ;
         v_row t_student%rowtype ;
     begin
   
          v_sql :='select * from t_student  where  1=1 ';
   
             if  v_stuname is not null then 
                 v_sql :=v_sql  || '  and stuname like  ''%'  || v_stuname || '%'' ' ;
              end if;  
  
            if  v_sex is not null then
                   v_sql :=v_sql || '  and sex = '''  || v_sex || ''' ' ;
            end if;
  
            dbms_output.put_line('v_sql= ' || v_sql );
   
  
        -- open mycursor for select * from t_student; 
         open mycursor for v_sql ;
         loop
             fetch mycursor into v_row ;
             exit when mycursor%notfound ;
             dbms_output.put_line(v_row.stuname || ',' || v_row.sex || ',' || v_row.age);
         end loop;
         close mycursor ;  
   
     end ;

游标的小结:

  • 游标用于处理查询结果集中的数据
  • 游标类型有:隐式游标、显式游标和 REF游标
  • 隐式游标由 PL/SQL 自动定义、打开和关闭
  • 显式游标用于处理返回多行的查询
  • 显式游标可以删除和更新活动集中的行
  • 要处理结果集中所有记录时,可使用循环游标
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle11g全新讲解之PLSQL编程
  是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言.通过增加变量、控制语句,使我们可以写一些逻辑更加复杂的数据库操作.
用户4919348
2023/04/28
7790
Oracle11g全新讲解之PLSQL编程
PLSQL-游标
游标(Cursor):用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。
字母哥博客
2020/09/23
8770
ORACLE游标(oracle游标属性)
简单说,退出循环的必要条件:fetch 语句执行成功 + 第一次 fetch 的值返回 null
全栈程序员站长
2022/08/02
1.9K0
ORACLE游标(oracle游标属性)
PL/SQL学习笔记-游标
更多隐式游标属性请看此系列文章的附录: 常用函数 输出结果为受影响的行数 不能对隐式游标执行显示游标类似的操作,如: open  fetch close等 六:用for循环简化游标的操作
liulun
2022/05/09
2200
Oracle总结【PLSQL学习】
PLSQL介绍 PLSQL是Oracle对SQL99的一种扩展,基本每一种数据库都会对SQL进行扩展,Oracle对SQL的扩展就叫做PLSQL… SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数据库操纵能力强,只需发送命令,无需关注如何实现 (3)多表操作时,自动导航简单,例如: select emp.empno,emp.sal,dept.dname fr
Java3y
2018/03/15
2.6K0
Oracle总结【PLSQL学习】
PL/SQL 编程(二)游标、存储过程、函数
游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段。 可以将游标形象的看成一个变动的光标,他实质上是一个指针,在一段Oracle存放数据查询结果集或者数据操作结果集的内存中,这个指针可以指向结果集任何一条记录。 游标分静态游标和REF游标两类,静态游标包含显式游标和隐式游标。 显式游标: 在使用之前必须有明确的游标声明和定义,这样的游标定义会关联数据查询语句,通常会返回一行或多行。打开游标后,用户可以利用游标的位置对结
二十三年蝉
2018/02/28
4K0
Oracle应用实战八(完结)——存储过程、函数+对象曹组
游标 在写java程序中有结果集的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。 游标可以理解为是PL/SQL中的结果集,我们通过游标可以提取结果
Java帮帮
2018/03/19
2K0
Oracle应用实战八(完结)——存储过程、函数+对象曹组
Oracle-PL/SQL基础
pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展,pl/sql不仅允许嵌入Sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。
小小工匠
2021/08/16
1.9K0
游标和动态SQL
游标类别:静态游标(指在编译的时候,游标就与一个select语句进行了静态绑定的游标,这种游标只能作用于一个查询语句)和动态游标(就是希望我们的查询语句在运行的时候才跟游标绑定,为了使用动态游标,必须声明游标变量)。
全栈程序员站长
2022/09/09
1.2K0
Oracle11g全新讲解之触发器和视图索引
  根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合。它存储了要执行检索的 查询语句的定义 ,以便在引用该视图时使用。
用户4919348
2023/05/27
5300
Oracle11g全新讲解之触发器和视图索引
Oracle数据库易遗漏的知识点(二)
我们区分in和exists主要是驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系
提莫队长
2019/03/01
5020
Oracle数据库易遗漏的知识点(二)
oracle游标的使用详解_oracle游标失效
游标(CURSOR):游标是把从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作。
全栈程序员站长
2022/11/18
2.1K0
oracle游标的使用详解_oracle游标失效
Oracle 动态SQL「建议收藏」
一、动态SQL的简介 1、定义 静态SQL是指直接嵌入到PL/SQL块中的SQL语句。 动态SQL是指运行PL/SQL块是动态输入的SQL语句。
全栈程序员站长
2022/09/09
1.7K0
快速学习Oracle-pl/sql 基本语法
PL/SQL(Procedure Language/SQL)PLSQL 是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。
cwl_java
2019/12/19
1.2K0
PL/SQL --> 游标
映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集中某个特定的行,然后根据业务需求
Leshami
2018/08/07
1.2K0
Oracle-procedure/cursor解读
存储过程( Stored Procedure )是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。
小小工匠
2021/08/16
9930
存储过程常见语法
1、存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行
全栈程序员站长
2022/09/13
1.9K0
存储过程常见语法
Oracle-PLSQL学习
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
颍川
2019/11/21
9510
Oracle中游标Cursor使用实例
Oracle数据库中的cursor分为2中类型:shared cursor,session cursor
星哥玩云
2022/08/17
1.2K0
Oracle PL/SQL随堂笔记总结
1.理解oracle的pl/sql的概念 2.掌握pl/sql编程技术(过程、函数、触发器) pl/sql是标准sql语句的扩展 简介 1.过程、函数、触发器都是由pl/sql编写 2.过程、函数、触发器是在oracle中 3.pl/sql是非常强大的过程语言 4.过程、函数等可以在java程序被调用 学习必要性: 1.提高应用程序的性能 2.模块化的设计思想 3.减少网络传输量 4.提高安全性 不好的方面: 移植性差 pl/sql可以使用变量和逻辑控制语句 可编写:分页存储过程模块,订单处理存储过程模块,转账存储过程模块……
Alfred Zhao
2019/05/24
2.2K0
相关推荐
Oracle11g全新讲解之PLSQL编程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档