专栏首页微卡智享Oracle的静态游标与动态游标

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语句使用动态游标遍历销售进行数据的更新。

本文分享自微信公众号 - 微卡智享(VaccaeShare)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL 每秒 570000 的写入,如何实现?

    一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。

    数据和云
  • oracle聚合函数XMLAGG用法简介

    XMLAGG函数语法基本如图,可以用于列转行,列转行函数在oracle里有好几种方法,wm_concat也可以做

    用户1208223
  • LINUX weblogic集群搭建- 03启动脚本的控制

    1.adminServer配置 base_domain/servers/AdminServer下新建文件夹security 同时里面创建一个新的文件boot.p...

    用户1499526
  • oracle使用sequence批量写数据

    本博客是对之前写的博客Oracle批量新增更新数据的补充,oracle的知识真是多,其实要学精任何一门知识都是要花大量时间的,正所谓:

    用户1208223
  • 20万DBA最关注的11个问题

    原文:http://www.enmotech.com/web/detail/1/757/1.html

    数据和云01
  • Linux Oracle 11.2.0.4 单节点数据库升级至11.2.0.4.190416 安装指北

    4 月中旬, Oracle 官方发布了季度补丁程序包,我们生产环境的众多数据库能打补丁的都打上了补丁,不重要的数据库也不能打补丁则关停了一段时间,上个月也可真是...

    JiekeXu之路
  • 关系型数据库Oracle之RMAN备份ORA-19625等错误解决办法

    看到这报错,很简单对吧,找不到归档日志,便报错了,基本上没什么可说的,但对于初学者而言,还是记录以下,以便后来者参考。先说说这个错误怎么来的吧,事情的经过是这样...

    JiekeXu之路
  • Linux 下Weblogic集群搭建-04通过nodemanage进行节点的启动与关闭

    1.adminserver(10.0.5.51) 。 node节点(ip:10.0.5.52)

    用户1499526
  • 2019Java面试宝典 -- 数据库常见面试题

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合...

    浩Coding
  • PostgreSQL 分区表一点也不差

    MYSQL 在分区表上的缺失不同,POSTGRESQL 的分区表那算是“硬可”。PG11 已经推出了HASH 分区。具体操作是怎样

    AustinDatabases

扫码关注云+社区

领取腾讯云代金券