当前位置:网站首页 > 技术博客 > 正文

游标sql语句



oracle存储过程—-游标(cursor)的学习
游标()的定义与作用

  游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
  不过我是新手,我理解的是,游标就像我们查询数据返回的集合类型,比如 ,我就把它当做一个引用类型,它指向了内存区域中的数据结果集

游标()的应用场景

  就以我现在理解的来说,游标既然像查询结果集 ,那使用 的情况,肯定会有下边这两种情况,才可能使用到 :

  1. 需要依据查询到的结果集,作为条件,进行下一步的查询。
  2. 需要在结果集某个位置上,满足某种条件时,对数据进行不同的修改。
游标()的使用考虑

  上边的两种情况,都会涉及到遍历数据( 里如何遍历数据,下一篇再写),所以游标的使用也需要注意:

  • 比如,你的查询结果集很大,首先占了很多的内存,其次,遍历这么庞大的结果集,效率也肯定高不了。
  • 另外,如果还有其他方式解决问题的话,那就不要选择使用游标(网上搜来的),我没测试过效率,但是游标在使用中,的确有,定义游标、打开游标、关闭游标,这些操作,这样也肯定快不了多少。
游标()的类别

  游标有两种,和。

隐式游标
  上一篇中用到的SELECT…INTO…查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。
DML操作和单行SELECT语句会使用隐式游标,它们是:

  • 插入操作:INSERT。
  • 更新操作:UPDATE。
  • 删除操作:DELETE。
  • 单行查询操作:SELECT … INTO …。

  (2018-08-19补充)当然,隐式游标还有一种写法,如下,并没有定义游标:

  如下方式执行:

  将会看到如下的结果:

  提示一下:因为隐式游标默认打开游标,但是如果调用 却返回 。这个注意一下,如果还没懂 啥意思,那暂且不要管这个提示了。

显式游标
  显示游标还分为和 。显示游标的写法会在存储过程中定义 ,并且一般都有固定的四个步骤: 、 、 、 。显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。
  隐式游标其实默认已经打开游标,并在执行完成后关闭游标释放资源。
 &ems;如果你想详细了解一下 ,我是参考了下边这两篇文章:

  • oracle中游标详细用法
  • 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
游标()的例子

  下边是我学习后写的第一个游标的例子。不像上边那个隐式游标的例子连游标都没有定义,下边这个是定义了游标,但是没有去打开, 循环会默认打开游标的。

  上边,首先看 这一行,它的意思是定义一个游标, 为你要定义的名字,而 后边是一个sql,也就是说当前这个sql的查询结果,赋值给游标 。
  然后,往下,接着 ,这个是定义了一个类型,而这个类型,即是游标 的返回结果类型,类型的名字为 。有点类似于 中 集合中的一个 。
  另外,关于 是一个循环的写法, ,即,从游标 中取出一个结果 。
  还有,注意, 和 这是一个循环的开始标志和结束标志,但它俩兄弟是一个很执着的循环,如果没有定义退出条件,永远不会退出的,所以在上边的循环里边,有了退出条件 ,即当游标 中没有数据了,就退出循环。
  当然 循环的退出,发生下边的情况,才能退出:

  1. 有exit,并满足条件后退出。
  2. loop中抛出了异常。
  3. 存在 标识。
  执行上边的存储过程:

  会得到如下的遍历结果,正是我根据条件查询到的结果集。

  下一篇oracle存储过程—-遍历游标的方法(for、fetch、while)

版权声明


相关文章:

  • 异步fifo的verilog代码2024-11-17 16:30:00
  • 简述makefile的作用2024-11-17 16:30:00
  • 操作系统题库及答案2024-11-17 16:30:00
  • monkey软件测试教程2024-11-17 16:30:00
  • python assert函数用法2024-11-17 16:30:00
  • 密码学学什么课程2024-11-17 16:30:00
  • azw3阅读器电脑版2024-11-17 16:30:00
  • python环境怎么搭建2024-11-17 16:30:00
  • 标志位寄存器的作用2024-11-17 16:30:00
  • 破解hash加密2024-11-17 16:30:00