数据库游标学习记录

SQL-Server数据库存储过程学习 一.在生产中涉及到SQL-Server数据库存储过程,顺便学习记录 --创建存储过程 可生成当年所有日期,并且周末工作时间为0小时 ,其中HR_Calendar  为业务表 CREATE PROCEDURE dbo.Auto_HR_Calendar AS  SET DATEFIRST 1 declare @i varchar(10)  declare @j int declare @year i... 阅读详情

一、游标的定义:游标是一个容器,用来记录查询结果集的,本质是一块内存,如果不释放,就会占用内存,这就是为什么open之后还要close操作。

二、游标的优缺点:

1.优点:游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多;如果我们要对查询出的结果做特殊处理,然后在进行下一步操作(比如将数据存新表),使用游标也是比较方便的;

2.缺点:当数据量非常大时,使用游标会带来很大的效率问题,因为游标其实是相当于把磁盘数据整体放入了内存中,游标数据量大的话则会造成内存不足;另外系统上跑的不只是一个业务,游标使用会对行加锁,可能影响其他业务的正常进行。所以慎用游标

三、游标的具体使用:

1.显示游标

显示游标的属性,通常用来获取一个游标的状态信息

1.1、isopen(Boolean):如果游标是打开的,那么这个游标的值为true

1.2、notfound(Boolean):如果最近一次的fetch操作没有返回一行数据,那么此值为true

1.3、found(Boolean):如果最近一次的fetch操作返回一行数据,那么此值为true

1.4、rowcount(Number):返回行数的总和,使用时的格式:”游标名%rowcount“,注意不能在游标打开之前和游标关闭之后使用此属性。

显示游标的使用步骤:

a.定义游标

b.打开游标

c.提取游标数据

d.关闭游标

具体使用:(从两张表中按照一些规定抽出部分数据)

declare
  orgVar       varchar2(30);
  psuhDateVar  varchar2(30);
  memLevelVar  varchar2(30);
  lowVar       varchar2(30);
  validVar     varchar2(30);
  effectiveVar varchar2(30);
  cursor OrgAndExpireData is
    select a.config_org,
           a.push_date,
           case a.mem_level
             when '0' then
              '1,2,3,4,5,6'
             else
              a.mem_level
           end mem_level,
           a.lowest_source_expire,
           a.is_valid,
           a.effective_date
      from integral_expire_rules a
      left join push_date_table b
        on a.config_org = b.config_org
     where a.is_valid = '1'
       and to_char(a.effective_date, 'yyyy-MM-dd') <=
           to_char(sysdate, 'yyyy-MM-dd')
       and a.push_date = to_char(sysdate, 'dd');
  -- and (to_char(b.push_finish_date,'yyyy-MM')!=to_char(sysdate,'yyyy-MM') or b.push_finish_date is null);

begin
  open OrgAndExpireData;
  loop
    fetch OrgAndExpireData
      into orgVar, psuhDateVar, memLevelVar, lowVar, validVar, effectiveVar;
    exit when OrgAndExpireData%notfound;
    dbms_output.put_line(orgVar || '.....' || psuhDateVar);
  end loop;
  close OrgAndExpireData;
end;

2、隐式游标

使用隐式游标时,不需要我们手动执行open,fetch,close操作了,PL/SQL语言提供了游标FOR循环语句,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能;

隐式游标是不需要定义的,系统默认等同为游标的,入一个select语句,DML语句,都会打开一个游标。

2.1.当进入循环时,游标For循环语句自动打开游标,并提取第一行游标数据;

2.2.当程序处理完当前所提取的数据而进入下一次循环时,游标FOR循环语句自动提取下一行数据供程序处理;

2.3.当程序处理完当前所提取的数据而进入下一次循环时,游标for循环语句自动提取下一行数据供程序处理;

declare

cursor OrgAndExpireData is
       select *           
       from integral_expire_rules a left join push_date_table  b
       on a.config_org=b.config_org
       where a.is_valid='1'
       and to_char(a.effective_date,'yyyy-MM-dd')<=to_char(sysdate,'yyyy-MM-dd')
       and a.push_date=to_char(sysdate,'dd');
      -- and (to_char(b.push_finish_date,'yyyy-MM')!=to_char(sysdate,'yyyy-MM') or b.push_finish_date is null);
            
begin
   for storeVar in OrgAndExpireData loop
		 dbms_output.put_line(storeVar.rule_name||'....'||storeVar.mem_level||'..'||storeVar.is_valid);
		 end loop;
end;

参考博客:

https://www.zhihu.com/question/19777435/answer/37060426
https://blog.youkuaiyun.com/haiross/article/details/42967213

补充存储过程相关:

1.select into form  和 insert into select 的区别

1.1  insert into select
   语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
   或者:Insert into Table2 select  *  from Table1
   
   @1要求目标表Table2必须存在,并且字段field,field2...也必须存在
   @2注意语法,不要加values,和插入一条数据的sql混了,不要写成:
           Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)
           
1.2 select into form
    语句形式为:SELECT vale1, value2 into Table2 from Table1
    要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
             
2.存储过程中不能直接使用ddl语句,如truncate table,需要这种形式:
    execute immediate 'truncate table emp';注意,引号内不能加分号

【农信考研341笔记1】 创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );③游标推进语句(FETCH):此时执行游标向前推进一行,并把游标指向的行中的值取出,放到语句中说明的对应的程序变量中。创建索引,例如CREATE UNIQUE INDEX ON tablename (列的列表); 阅读详情

相关推荐

游标算法_伪码Eamonn.pdf

海拉传感器游标算法

小张学算法之基础算法:2.游标编码算法

定义: 游标编码就是将一连串相同的字符或数据使用 次数+数据的方式进行压缩。属于熵编码的一种。 例子: 加入文本数据: aaaaaabbbbbbbccc 就可以表示为 6a7b3c 原本存储需要16个byte存储,现在只需要6个字符了。 如何存储呢: 如果只是顺序的存储cnt+数据的存储方式,我们没法解决有数字的文本信息,当出现数字时没法知道到底是数字4还是cnt值为4。 存储结构 所以我们以这样的数据结构来存储: struct { byte cnt; byte dat; } 第一字节存cnt,第

qq_40036519的博客 1558

游标算法_伪码.pdf

游标算法_伪码.pdf

SQL Server技术问题之游标优缺点

分类: MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标。 (1) Transact_SQL 游标 Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是...

极客神殿 1471

思科模拟器汉化教程(附带中文汉化包)

思科模拟器是一种模拟Cisco网络设备的软件工具。它可以模拟Cisco网络设备的所有功能,包括路由器、交换机、防火墙等,并提供了一个可视化的用户界面,让用户可以通过图形化的方式来管理网络设备。思科模拟器因其便捷、易用的特点被广泛应用于网络工程师的实验、测试和培训等方面思科模拟器的功能是强大的,但当我们在使用思科模拟器的时候就会有一些烦恼,由于思科是全球最大的企业级网络设备供应商之一。思科公司的产品和服务被广泛应用于各种领域和行业,所以思科模拟器默认是全英文的,但是在最新版本中是支持中文的。

2302_76908369的博客 4万+

告别GUI点点点:Formality形式化验证的TCL脚本自动化实战(附完整脚本)

本文详细介绍了如何通过TCL脚本实现Formality形式化验证的全流程自动化,显著提升验证效率并降低错误率。内容涵盖脚本框架解析、参数化设计、验证报告生成及团队协作策略,特别适合芯片设计工程师摆脱传统GUI操作,实现300%以上的效率提升。

weixin_33737134的博客 283

每日算法-插值查找

插值查找算法实现.

u013398960的博客 619

人工智能,不止于模型:四步实现完整工作流

工程师越来越多地致力于将人工智能 (AI) 集成到自己的项目和应用中,同时不断着力提升自己的 AI 技能。面对 AI 问题,工程师首先要了解什么是 AI,以及如何将它纳入当前工作流,这看似简单,实则未必容易。在 Google 中搜索“什么是 AI?”会得到数百万条结果,包括不同程度的技术和相关信息。那么,对工程师而言,AI 意味着什么?人们对 AI 的关注主要集中在 AI 模型上,受此影响,工程师会迅速投入 AI 建模的研究。

r1832644594的博客 2818

Html5——indexedDB数据库学习记录6之【游标与index和游标结合】

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;&lt;html&gt;&lt;head&gt;    &lt;meta http-equiv="Content-Type" content="text/html; ch

Superstatus的博客 1071

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由嵌套下keep-alive缓存失效的根本原因,并提供了三种实战解决方案。通过剖析组件树、router-view与keep-alive的协作机制,揭示了缓存无法穿透多层router-view的技术本质。文章对比了路由扁平化重构、状态管理配合路由守卫以及使用社区插件等方案的优缺点与适用场景,为开发者解决这一常见难题提供了清晰的选型指导。

weixin_29001423的博客 271

如何用Hugo Stack主题打造极简技术博客?3个必改配置与5个高级美化技巧

本文详细解析了如何深度定制Hugo Stack主题,打造个性化技术博客。文章提供了3个必改配置与5个高级美化技巧,涵盖字体美学、布局重构、代码块视觉强化及细节打磨,帮助开发者超越基础部署,实现从功能到美学的进阶,提升博客质感与用户体验。

carrot的博客 568

Oracle 游标

游标,是SQL的一个内存工作区,用来存放select的结果集。 游标用来处理数据库检索的多行记录(使用select语句)。利用游标,程序可以逐个的处理和遍历一次索引返回的结果集。 在数据库中,存在两种游标,静态游标(隐式和显式)、ref游标(+游标变量) 示例数据准备 -- 建表 create table student( id varchar2(4), name v...

weixin_33725126的博客 196

模型瘦身术:YOLOv5无损剪枝实战教程

本文介绍了一种YOLOv5模型的无损剪枝方法,通过"稀疏训练+结构化剪枝+微调"的流程,在不损失精度的前提下显著减小模型尺寸并提升推理速度。具体步骤包括:1)稀疏训练给参数排优先级;2)裁剪不重要通道;3)微调恢复精度;4)验证效果。实战部分详细展示了从环境搭建到剪枝实现的完整流程,并分析了剪枝后在边缘设备部署、实时检测等场景的优势。该方法可使YOLOv5s模型从14MB缩减至2-3MB,推理速度提升30%-50%,适用于资源受限设备的轻量化部署需求。

LXY_LOVE36的博客 104

sql游标

sql

qq_63947150的博客 161

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1963

C# 的 Dapper 库高级进阶:刨根问底的深度解析

通过今天的探索,我们了解了 Dapper 的一些高级功能,包括如何处理复杂的查询、执行批量操作以及如何优化性能。希望这篇深入浅出的文章能帮助你在实际项目中更好地运用 Dapper!🎈好了,小伙伴们,今天的分享就到这里啦!如果你有任何疑问或者想要分享自己的经验,请在评论区留言。我们下次再见!👋上述示例代码仅供参考,实际使用时请根据项目需求进行适当调整。✨Dapper 官方文档Dapper 性能优化指南Dapper 动态参数使用来同时执行多个查询。利用Execute和Query方法来简化 SQL 调用。

java专栏 813

HIT-数据库系统Lab1-实验记录

本系列文章仅是一名2020级菜狗完成zdc老师数据库系统实验时写下的实验记录,大部分是一些实验过程中查找博客的记录。本实验要求完成一个可交互式练习SQL语句构造与执行的系统的开发

weixin_51611639的博客 1683

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

哈工大数据库系统(上):嵌入式SQL语言之基本技巧(九)课后测验与作业

文章目录前引第九章课后习题 前引 刚刚去某乎去看了看 这两天学习数据库直到刚刚就开始觉得有点点不对劲了 因为我想的是实践部分按理来说应该非常多的 因为数据库是需要操作的 但是哈工大的这门课课后竟然全是理论题 - - 我记得我学习C语言的时候 就是把哈工大的课后所有c语言题目全部写完了 因为我的理解是 手写实践+理论才等于掌握 哎 - - 只能现在先通一遍视频 之后再去看看书 看一下怎么实践掌握SQL了 还有一件事情 可能是前面几章发模拟题的老师良心发现了 现在模拟题答案终于不是全是A了 ^^ 哈哈 现在

Love 6's Private Blog 1859

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android Studio打包AAR全流程指南:从JAR到AAR的工程实践与避坑手册

在Android模块化开发中,组件复用是提升工程效率的关键,而实现高效复用的前提是选择正确的二进制交付格式。AAR(Android Archive)作为Android Library的标准打包产物,弥补了JAR无法携带资源和Manifest的短板,成为SDK交付、二方库共享以及本地预编译场景下的主流选择。从技术原理看,AAR本质是zip归档,内部包含编译后的classes.jar、res资源、AndroidManifest.xml、R.txt索引及proguard混淆规则,借助Gradle构建链可实现资源合

weixin_33850890的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PL/SQL

PL/SQL

crushb的博客 1088

MongoDB随笔

next遍历游标 find()命令并不直接返回结果,而是返回一个结果集的迭代器,即游标。使用 象大多数数据库产品一样,MongoDB 也是用游标来循环处理每一条结果数据,具体语法如 下: > for( var c = db.t3.find(); c.hasNext(); ) { ... printjson( c.next()); ... } 输出结果如下: { "_i...

baizun7152的博客 100

PL/SQL语言的学习路线

PL/SQL是一种面向过程的编程语言,其设计目的是为了提升SQL的功能和效率。与标准SQL不同,PL/SQL支持变量、条件语句、循环、异常处理等程序结构,使得编写复杂的数据库逻辑变得更为简洁和高效。学习PL/SQL是一个循序渐进的过程,只有在掌握SQL的基础上,才能更好地理解和运用PL/SQL。本文提供的学习路线包括PL/SQL的基础知识、语法以及应用实践,帮助读者系统地掌握这门语言。希望每位读者都能通过不断的学习和实践,熟练掌握PL/SQL,为职业发展打下坚实的基础。

2501_90494484的博客 474

oracle记录所有sql语句怎么写,记录一些sql语句oracle的

记录一些sql语句oracle的select d.code,d.name, sum(w.weight) weight,round(avg(w.price),2) price,sum(w.money) moneyfrom weight_info w left outer join t_dict d on w.productcode=d.code left outer join t_balancec...

weixin_32620855的博客 229

PL/Sql循序渐进全面学习教程

PL/Sql循序渐进全面学习教程--Oracle(1)课程 一 PL/SQL 基本查询与排序 本课重点:    1、写SELECT语句进行数据库查询    2、进行数学运算    3、处理空值    4、使用别名ALIASES    5、连接列    6、在SQL PLUS中编辑缓冲

为天加朵云... 2326

mysql存储过程(三)

mysql存储过程(三)文章目的:学习目标:需要具备的知识:学习内容:学习时间:学习产出:学习步骤:1.存储日志运行代码2.存储日志调用3.运行结果学习总结: 文章目的: 本文旨在记录存储过程的学习过程,便于以后的回顾。 学习目标: 创建一个统计数据库里每个表对应数据的存储过程 需要具备的知识: 1.mysql的SQL语句 sql语句 2.mysql 存储过程 存储过程 3.mysql 游标(cursor) 游标 4.mysql information_schema数据库 information_sch

weixin_42322925的博客 298

python操作pymysql_python使用pymysql操作MySQL的基础操作

最近在学习python爬虫,写一下关于MySQL数据库操作的笔记有错误的话还请看到的大佬们指正1.导包import pymysql2.链接数据库conn = pymysql.connect(host='127.0.01',port=3306,user='root',password='123456')3.获取游标cursor=conn.cursor()4.创建数据库和表4.1 创建database...

weixin_39785400的博客 99
上一篇: 常用正则表达式(copy)
下一篇: spring boot启动原理(包含自动配置)解析
ITdevil
博客等级 码龄11年 25粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值