返回顶部
首页 > 资讯 > 数据库 >游标
  • 628
分享到

游标

游标 2020-02-14 18:02:50 628人浏览 才女
摘要

一个对表进行查询的sql语句通常都会产生一组记录,称为结果集。但是许多应用程序,尤其PL/SQL嵌入式的主语言(如java,C等),通常并不能把整个结果集作为一个单元来处理,因此,这些应用程序需要一种机制来保证每次只处理结果集中的

游标

一个对表进行查询的sql语句通常都会产生一组记录,称为结果集。但是许多应用程序,尤其PL/SQL嵌入式的主语言(如java,C等),通常并不能把整个结果集作为一个单元来处理,因此,这些应用程序需要一种机制来保证每次只处理结果集中的一行或几行,游标就提供了这种机制,即对一个结果集进行逐行处理的能力。

游标可以作为一种特殊的指针,它与某个查询结果相联系,可以指向结果集的任意位置,以便对指定位置的数据进行操作。使用游标还可以在查询数据的同时处理数据。

1.显示游标

显式游标是作为声明段的一部分进行定义

(1)定义的方法如下:

 declare cursor 游标名

is

select语句

--下面是一个游标定义实例:
declare  cursor  cu_stu
is
select * from school_students
where stu_id="201200001"

对显示游标是使用要遵循声明游标--打开游标--读取游标--关闭游标的步骤

(2) 打开游标

     open 游标名称

 (3) 读取数据

     fetch 游标名称 into 变量      (into子句将读取的数据存放在指定的变量中)

(4)关闭游标

     close 游标名称

--定义游标XS_CUR1,然后打开游标,输出。
declare
   v_num varchar2(20);
   v_name  varchar2(20);
   declare  cursor  cu_stu
   is
    select stu_id,stu_name from school_students
    where stu_id="201200001";

  begin
    open cu_stu;                             //打开游标
     fetch  cu_stu  into v_num,v_name;     //读取游标
         close v_name;                   //关闭游标
         dbms_output.put_line(v_num||v_name);  //输入定义的游标
    end;

 显示游标注意事项:用fetch语句取游标数据到一个或多个变量中,目标变量的数据和类型必须与游标select表中表列的数目,数据类型相一致。

 

2.隐式游标

如果在PL/SQL程序段中使用select语句进行操作,PL/SQL会隐含地处理游标定义,即为隐式游标。这种游标不需要像显示游标那样声明,也不必打开和关闭

declare
   v_num number(3);
   begin
      select count(*)  into v_num
      from school_result
      where result_number>=80;
      if v_num>5 then
           dbms_output.put_line("超过5人");
      else
          dbms_output.put_line("没有超过5人");
      end if;
    end;

使用隐式游标要注意一下几点:

每个隐式游标必须有一个into

与显式游标一样,接收数据的目标变量的数目,数据类型要与select列表中的一致

隐式游标一次仅能返回一行数据,使用时必须检查异常,最常见的异常有no_data_found和too_many_rows

为确保隐式游标仅返回一行数据,可用rownum=1来限定,表示返回第一行数据

 

 3.游标变量

游标就行C语句的指针一样,在PS/SQL中,指针有ref x数据类型(这里ref是reference是缩写,x表示类对象),因此游标变量具有ref cursor类型。

delcare

type xs_cur is ref cursor return school_students%rowtupe;

my_cur xs_cur;

注意:ref cursor类型可以是强类型,也可以是弱类型。强类型ref cursor类型有返回类型,弱类型ref corsor没有返回类型

 

4.游标for循环

for循环和游标的结合使得游标的使用更简明,用户不需要打开游标,取数据,测试数据的存在(用%found或%found)以及关闭游标这些重复繁琐的操作。当游标被调用时,用selcet语句中的同样一些元素创建一条记录,对于游标检索的每一行继续执行循环内的全部代码,当发现没有数据时,游标自动关闭。

 

declare
    type v_row   is record
    (
        kch  varchar2(50),
        kcm  varchar2(50)
    );
    
    type v_cu  is ref cursor RETURN v_row;
    my_kc v_cu;
    my_row v_row;
    
    begin 
       open my_kc for 
       select  course_id,course_name
       from  school_course;
       
       fetch  my_kc into my_row;
       while my_kc%found
           loop
              dbms_output.put_line("课程号:"||my_row.kch||",课程名称:"||my_row.kcm);
              fetch  my_kc into my_row;
           end loop;
    end;
    

 注意:

用%found或%nofound检测游标操作成功与否。%found属性表示当前游标是否指向有效的一行,如果游标按照其选择从数据库中成功查询出一行数据,则返回true,否则返回false,表示失败。%nofound属性的功能与%found的含义相反。所以每次执行完fetch(读取数据)语句后,检查游标的这两个属性就可以判定fetch语句是否执行成功。该检测必须在游标关闭前执行。

循环执行游标取数据时,最近一次提取到数据行的序列号保存在系统变量%rowcount中

 

5.控制游标变量

在使用游标变量时,要遵循如下步骤:OPEN→FETCH→CLOSE。首先,使用OPEN打开游标变量;然后使用FETCH从结果集中提取行,当所有的行都处理完毕时,使用CLOSE关闭游标变量。OPEN语句与多行查询的游标相关联,它执行查询,标志结果集。

 

此外,还可以声明游标变量作为函数和过程的参数。例如:

declare

type 游标变量名 is ref cursor rentrun 表%rowtype;

function xs(参数名称 in 游标变量名) ……

 

您可能感兴趣的文档:

--结束END--

本文标题: 游标

本文链接: https://lsjlt.com/news/6801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 游标
    一个对表进行查询的SQL语句通常都会产生一组记录,称为结果集。但是许多应用程序,尤其PL/SQL嵌入式的主语言(如java,C等),通常并不能把整个结果集作为一个单元来处理,因此,这些应用程序需要一种机制来保证每次只处理结果集中的...
    99+
    2020-02-14
    游标
  • SQLSERVER游标
    --1.声明游标提取数据所要存放的变量declare @OrderId int ,@userId varchar(15)---2.声明游标declare cur_name cursor scrollfor select ...
    99+
    2020-08-21
    SQLSERVER游标 数据库入门 数据库基础教程 数据库 mysql
  • Oracle 游标
    游标概念在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或...
    99+
    2024-04-02
  • MySQL 游标
    光标声明声明光标DECLARE cursor_name CURSOR FOR select_statement这个语句声明一个光标。也可以在子程序中定义多个...
    99+
    2024-04-02
  • MySQL游标
    阅读目录 定义游标的作用游标的使用游标语法条件处理 创建表:test1、test2、test3写一个函数,计算 test1 表中 a、b 字段所有的和测试游标过程解析 定义 游标(Cursor)是处理数据的一种方法,为了...
    99+
    2023-08-30
    mysql 数据库 java
  • 详解Oracle隐式游标和显式游标
    游标是什么?就是在内存开辟的一块临时存储空间。 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的em...
    99+
    2024-04-02
  • MySQL 游标 - G
    MySQL 游标   SQL语句是“面向集合编程”,重点在于“获得什么”,而不是“如何获得”。 有时候我们不需要对查询结构集的每一条都进行相同的操作,而是只操作其中的某些行,这时候就需要面向过程的编程方法,而游标就是面向过程编程...
    99+
    2016-08-31
    MySQL 游标 - G
  • SqlServer 游标(一)
    1.简述 在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_Sql选择语句相关联因为游标由...
    99+
    2019-05-08
    SqlServer 游标(一)
  • MongoDB 文档游标
    可以通过下标来访问查询结果 item 可以迭代、遍历 打印出所有item1 > var cursor=db.accounts.find({name:"alice2"}); > while(cursor.hasNext()){ print...
    99+
    2021-12-10
    MongoDB 文档游标
  • 数据库游标
    DECLARE rs CURSOR LOCAL SCROLL FOR SELECT RowIndex,Name FROM Real_CIU_VesselGeometry_CellSectionOPEN rsFETCH NEXT FR...
    99+
    2020-09-10
    数据库游标 数据库入门 数据库基础教程 数据库 mysql
  • Oracle中的游标
    目录 一、游标定义 二、游标分类 2.1静态游标 2.1.1. 隐式游标: 2.1.2. 显式游标: 2.1.3. 游标变量: 2.1.4. 游标参数: 2.2动态游标 2.2.1强类型游标 2.2.2弱类型游标 2.2.3普通动态游标 三...
    99+
    2023-09-21
    oracle 数据库 java
  • MySQL中的游标
    什么是游标? 游标(cursor)是一个存储在MySQL服务器上的数据库查询, 它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游 标之后,应用程序可以根据需要滚动或浏览其中的数据。 注意:MySQL游标只能用于 ...
    99+
    2023-09-01
    单元测试 自动化测试 职场和发展 软件测试 mysql
  • 游标和触发器
    第八章  游标和触发器   初识游标 在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指...
    99+
    2021-03-07
    游标和触发器
  • SQL Server 【提高】 游标
    游标定义 sql语言按照标准处理对象是集合,但有时候也需要针对单行的处理,所以就有了游标,类似C语言的指针一样。 使用方法 创建游标 declare cursor_name --游标名称,唯一标识 [insensitive] [scro...
    99+
    2016-03-07
    SQL Server 【提高】 游标 数据库入门 数据库基础教程 数据库 mysql
  • 存储过程+游标
    delimiter //drop procedure if exists `test` //CREATE  PROCEDURE `test`() comment '测试存储过程'BEGI...
    99+
    2024-04-02
  • Oracle 自适应游标
    1  自适应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用于解决以前版...
    99+
    2024-04-02
  • mysql基础五 游标
    一、游标的定义: create procedure p12()begin declare row_name varchar(20);declare row_num int; declare myC...
    99+
    2024-04-02
  • MongoDB笔记八——游标
    ...
    99+
    2024-04-02
  • mysql游标是什么
    本篇内容介绍了“mysql游标是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明游标是用来存储查询结果集的数据类型 , 在存储过程和函...
    99+
    2023-06-20
  • 什么是oracle游标
    Oracle游标是一种用来处理查询结果集的数据库对象。它允许开发者在一个SQL语句执行后,可以逐行地处理结果集中的数据。游标可以类比...
    99+
    2023-08-30
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作