Oracle的静态游标与动态游标

前言

我们在写Oracle的存储过程里面,经常会用到游标,Oracle里面的游标分为静态游标和动态游标。今天我们在说一下分别有什么不同。

静态游标和动态游标的概念

静态游标

显式游标和隐式游标称为静态游标,因为在使用他们之前,游标的定义已经完成,不能再更改。

定义:

Cursor 游标名(参数1,参数2......) is  查询语句

调用时:

for 变量行 in 游标名 loop

end loop;

动态游标

游标在声明时没有设定,在打开时可以对其进行修改。

定义:

TYPE 游标别名 IS REF CURSOR;

游标名 游标别名;

调用时:

open 游标名 for 动态SQL语句;

loop

    exit when 游标名%NOTFOUND;

    fetch 游标名

      into 变量1,变量2,变量3,变量4;

相对来说静态游标在存储过程中用到的会比较多,而动态游标相对较少,像我们如果存在分割表的时候,取数据时就会用到动态游标了。

代码演示

使用背景

我们在存储过程中输入开始和结束日期,用于查询开始到结束日期这一段时间内的销售。

解决思路

这个查询我们就可以用到静态游标和动态游标的结合使用。

  1. 通过静态游标设置开始和结果日期获取到所涉及到的当前年月。

  2. 根据获取到的当前年月生成要查询对应的月份分割表的动态SQL语句。

  3. 用动态游标遍历,然后进行数据的处理。

代码

上面是定义和静态游标和动态游标,下面的静态游标的写法,是根据输入的开始和结束日期获取对应的当前年月

即如果输入了2018-06-01----2018-08-30

游标显示结果为

201806

201807

201808


根据输入的日期通过静态游标生成对应的动态SQL语句。vs_sSql是我们的动态字符串,把主表查询先加进来,然后根据输入的开始和结束日期找到对应的月份分割表,然后判断表是否存在,如果存在的话就用union all把分割表加入到动态SQL语句里


通过动态sql语句使用动态游标遍历销售进行数据的更新。


-END-

长按下方二维码关注微卡智享

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值