本篇内容介绍了“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;
相对来说静态游标在存储过程中用到的会比较多,而动态游标相对较少,像我们如果存在分割表的时候,取数据时就会用到动态游标了。
代码演示
使用背景
我们在存储过程中输入开始和结束日期,用于查询开始到结束日期这一段时间内的销售。
解决思路
这个查询我们就可以用到静态游标和动态游标的结合使用。
通过静态游标设置开始和结果日期获取到所涉及到的当前年月。
根据获取到的当前年月生成要查询对应的月份分割表的动态SQL语句。
用动态游标遍历,然后进行数据的处理。
代码
上面是定义和静态游标和动态游标,下面的静态游标的写法,是根据输入的开始和结束日期获取对应的当前年月
即如果输入了2018-06-01----2018-08-30
游标显示结果为
201806
201807
201808
根据输入的日期通过静态游标生成对应的动态SQL语句。vs_sSql是我们的动态字符串,把主表查询先加进来,然后根据输入的开始和结束日期找到对应的月份分割表,然后判断表是否存在,如果存在的话就用union all把分割表加入到动态SQL语句里
通过动态sql语句使用动态游标遍历销售进行数据的更新。
“Oracle的静态游标与动态游标区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。