前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >游标--数据库

游标--数据库

作者头像
bear_fish
发布2018-09-14 10:56:26
7850
发布2018-09-14 10:56:26
举报

http://blog.csdn.net/liujiahan629629/article/details/18014051

以前也接触过游标,但是打心里说不是太理解,通过这次学习感觉理解深刻了很多,特此总结学习一下。

一,游标是什么?

游标是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时放到了一个内存区域的虚表中,而这个虚表就是游标。

二,作用是什么?

                  1,大家都知道数据库中的事物可以回滚,而游标在其中起着非常重要的作用,由于对数据库的操作我们会暂时放在游标中,只要不提交,我们就可以根据游标中内容进行回滚,在一定意义有利于数据库的安全。

                 2,另外,在Oracle中PL/SQL只能返回单行数据,而游标弥补了这个不足。相当于ADO.NET中的Data table吧。

三,类型:

                1,隐式游标:增删改等操作Oracle都会自动创建游标,暂时保存操作结果,也就是能够回滚的操作都会引发游标的创建。

                2,显示游标:由开发人员通过程序显式控制,用于从表中取出多行数据,并将多行数据一行一行的单独进行处理.

四,属性:

属性

注释

%rowcount

受SQL影响的行数

%found

Boolean值,是否还有数据

%notfound

Boolean值,是否已无数据

%isopen

游标是否打开

当然如果我们想获得隐式游标的属性,通过%前边加上SQL即可得到。例如SQL%rowcount.

五,游标简单认识了,我们来看看游标的具体使用:

           1,先看一下简单的使用游标四步骤:

步骤

关键词

说明

1

在DECLARE中cursor

声明游标,创建一个命名的查询语句

2

Open

打开游标

3

Fetch

取出游标中的一条记录装入变量

4

Close

释放游标

          2,当然游标中可以存放一条数据,也可以存放多条数据,后者是我们用游标,前者我们通过PL/SQL语句即可完成的,这样我们在这里就必须用到循环结构了,在Oracle数据库中我们可以使用while…… loop……end loop , for…… loop……end loop,loop……end loop。在这里需要提出的是,for循环结构在Oracle中被简化了,我们只需要声明和使用即可。看下边这个例子吧:

         a,whlie循环结构的:

[sql] view plaincopyprint?

代码语言:javascript
复制
 declare 
  --定义记录类型的变量 
   v_user user%rowtype;  
  --1,利用cursor关键字声明游标 
  cursor user_cur is 
  select * from user;  
 begin 
  --2,打开游标 
  open user_cur;  
  --3,利用fetch读取数据 
  fetch user_cur  
  into v_user;  
   while user_cur%found loop  
     dbms_output.put_line(v_user.userName);  
  fetch user_cur  
  into v_user;  
  end loop;  
  --4,释放游标 
  close user_cur;  
 end;  

       b,简化的for结构循环:

[sql] view plaincopyprint?

代码语言:javascript
复制
 declare 
  --1,利用cursor关键字声明游标 
  cursor user_cur is 
  select * from user;  
 begin 
  --2,直接使用,Oracle会自动打开和关闭等操作。 
  for v_user in user_cur loop  
        dbms_output.put_line(v_user.userName);  
  end loop  
 end;  

   这里就介绍这两种的类型,loop的和这都差不多。

          3,最后在这里再学习一下带参数的游标,也是就和我们但参数的类是一样的,只不过一个用在了数据库中,一个用在了编程语言中。

[sql] view plaincopyprint?

代码语言:javascript
复制
 declare 
  --定义记录类型的变量 
   v_User user%rowtype;  
  --1,利用cursor关键字声明带参数的游标 
  cursor user_Cur(v_UserNo number) is 
  select * from user where  userNo=v_UserNo;  
 begin 
  --2,打开带参数的游标,使之更加灵活 。 
  open user_Cur(1012);  
  --3,利用fetch读取数据 
   loop  
  fetch user_Cur into v_User;  
        exit when user_Cur%notfound;  
        dbms_output.put_line(v_user.userName);  
  end loop;  
  --4,释放游标 
  close user_Cur;  
 end;  

综上为游标的简单学习,回想过去的学习,可以发现游标可以和datatable很相似,为了增加灵活性,它和类也有非常相似的功能。所以米老师曾经告诉我们的语言是相通的,每一种事也是相同的。就例如,JAVA和.NET开发,SQL Server和Oracle一样,学通了一门,其它的转向都是非常快的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年12月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档