pl/sql中三种游标循环效率对比

IKM 测试题 - Java SE 8 评估测试题目 阅读详情

这里主要对比以下三种格式的游标循环:

1.单条处理

open 游标;
LOOP  
FETCH 游标 INTO 变量;
EXIT WHEN  条件;
END LOOP;
CLOSE 游标;

2.批量处理

open 游标;
FETCH 游标 BULK COLLECT INTO 集合变量;
CLOSE 游标;

3.隐式游标

for x in (sql语句) loop
...--逻辑处理
end loop;

以上为工作中常见的几种游标处理方式,一般来说批量处理的速度要最好,隐式游标的次之,单条处理的最差,但是在我的实际工作中发现大部分使用的还是第一种游标处理。

归其原因竟是对集合变量及批量处理的效率等问题不了解所致。

这里简单的测试一下以上三种游标的效率,并分析trace文件来查看这3种处理方式的本质。

--创建测试大表
[sql] 
00:09:54 SCOTT@orcl> create table big_data as select 'Cc'||mod(level,8) a,'Dd'||  
mod(level,13) b from dual connect by level<1000000;

Table created.  

Elapsed: 00:00:05.87  
00:11:17 SCOTT@orcl> select count(*) from big_data;  

  COUNT(*)  
----------  
    999999  

1 row selected.  

Elapsed: 00:00:00.07  
--分别执行以上三种方式的游标处理的plsql块
[sql] 
00:11:21 SCOTT@orcl> declare 
00:17:54   2    cursor c_a is 
00:17:54   3      select a from big_data;  
00:17:54   4  
00:17:54   5    v_a big_data.a%type;  
00:17:54   6  begin 
00:17:54   7    open c_a;  
00:17:54   8    loop  
00:17:54   9      fetch c_a into v_a;  
00:17:54  10      exit when c_a%notfound;  
00:17:54  11    end loop;  
00:17:54  12    close c_a;  
00:17:54  13  end;  
00:17:56  14  /  

PL/SQL procedure successfully completed.  

Elapsed: 00:00:07.42 


00:18:05 SCOTT@orcl> declare 
00:19:56   2    cursor c_a is 
00:19:56   3      select a from big_data;  
00:19:56   4  
00:19:56   5  type t_a is table of c_a%rowtype;  
00:19:56   6    v_a t_a;  
00:19:56   7  begin 
00:19:56   8    open c_a;  
00:19:56   9    --批量处理  
00:19:56  10      fetch c_a bulk collect into v_a;  
00:19:56  11    close c_a;  
00:19:56  12  end;  
00:19:57  13  /  

PL/SQL procedure successfully completed.  

Elapsed: 00:00:00.64 

00:22:55 SCOTT@orcl> declare 
00:23:18   2    v_a big_data.a%type;  
00:23:18   3    begin 
00:23:18   4    --批量处理  
00:23:18   5    for x in (select a from big_data) loop  
00:23:18   6      v_a:=x.a;  
00:23:18   7    end loop;  
00:23:18   8  end;  
00:23:18   9  /  

PL/SQL procedure successfully completed.  

Elapsed: 00:00:00.79

注意对比消耗时间,1为7.42s, 2为0.64s, 3为0.79s

在执行pl/sql块之前,需要执行语句: alter session set sql_trace=true;

以便之后查看trace文件.

第一个游标方式的trace文件如下:(单条处理)

PARSING IN CURSOR #7 len=181 dep=0 uid=84 oct=47 lid=84 tim=1357453194221500 hv=4093379502 ad='3ab9f6ec' sqlid='3nz96vvtzs0xf'
declare
  cursor c_a is
    select a from big_data;
  v_a big_data.a%type;
begin
  open c_a;
  loop
    fetch c_a into v_a;
    exit when c_a%notfound;
  end loop;
  close c_a;
end;
END OF STMT
PARSE #7:c=7998,e=8406,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1357453194221495
=====================
PARSING IN CURSOR #4 len=444 dep=2 uid=84 oct=3 lid=84 tim=1357453194225811 hv=1611503607 ad='3ab64c10' sqlid='c7tu1h9h0v5zr'
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),:"SYS_B_0"), NVL(SUM(C2),:"SYS_B_1") FROM (SELECT /*+ NO_PARALLEL("BIG_DATA") FULL("BIG_DATA") NO_PARALLEL_INDEX("BIG_DATA") */ :"SYS_B_2" AS C1, :"SYS_B_3" AS C2 FROM "BIG_DATA" SAMPLE BLOCK (:"SYS_B_4" , :"SYS_B_5") SEED (:"SYS_B_6") "BIG_DATA") SAMPLESUB
END OF STMT
PARSE #4:c=2000,e=1958,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=1,plh=0,tim=1357453194225807
*** 2013-01-06 14:19:54.284
EXEC #4:c=3998,e=58289,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=1,plh=3098652591,tim=1357453194284371
FETCH #4:c=18997,e=19074,p=0,cr=55,cu=0,mis=0,r=1,dep=2,og=1,plh=3098652591,tim=1357453194303593
STAT #4 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=55 pr=0 pw=0 time=0 us)'
STAT #4 id=2 cnt=27300 pid=1 pos=1 obj=75053 op='TABLE ACCESS SAMPLE BIG_DATA (cr=55 pr=0 pw=0 time=130371 us cost=19 size=61752 card=5146)'
CLOSE #4:c=0,e=86,dep=2,type=0,tim=1357453194318217
=====================
PARSING IN CURSOR #6 len=22 dep=1 uid=84 oct=3 lid=84 tim=1357453194318768 hv=3992159408 ad='3aae4de0' sqlid='3w21sgzqz715h'
SELECT A FROM BIG_DATA
END OF STMT
PARSE #6:c=28995,e=96556,p=0,cr=56,cu=0,mis=1,r=0,dep=1,og=1,plh=3104650627,tim=1357453194318766
EXEC #6:c=0,e=31,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=3104650627,tim=1357453194318875
FETCH #6:c=0,e=405,p=20,cr=4,cu=0,mis=0,r=1,dep=1,og=1,plh=3104650627,tim=1357453194319360
FETCH #6:c=0,e=13,p=0,cr=1,cu=0,mis=0,r=1,dep=1,og=1,plh=3104650627,tim=1357453194319425
FETCH #6:c=0,e=6,p=0,cr=1,cu=0,mis=0,r=1,dep=1,og=1,plh=3104650627,tim=1357453194319463
FETCH #6:c=0,e=5,p=0,cr=1,cu=0,mis=0,r=1,dep=1,og=1,plh=3104650627,tim=1357453194319496
FETCH #6:c=0,e=7,p=0,cr=1,cu=0,mis=0,r=1,dep=1,og=1,plh=3104650627,tim=1357453194319531
FETCH #6:c=0,e=5,p=0,cr=1,cu=0,mis=0,r=1,dep=1,og=1,plh=3104650627,tim=1357453194319564
...
1000108 FETCH #6:c=0,e=47,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=3104650627,tim=1357453214142218
1000109 STAT #6 id=1 cnt=999999 pid=0 pos=1 obj=75053 op='TABLE ACCESS FULL BIG_DATA (cr=1000002 pr=1832 pw=0 time=2281997 us cost=512 size=18637659 card=810333)'
1000110 CLOSE #6:c=0,e=1,dep=1,type=3,tim=1357453214142317
1000111 EXEC #7:c=19290067,e=19920346,p=1832,cr=1000058,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=1357453214142338
1000112 =====================

其中SELECT /* OPT_DYN_SAMP */这个大sql为CBO的动态采样SQL.这里也耗费了一些CPU time(即c的值).

我们发现大概有100多万的FETCH语句在trace中,也就是一条条的处理的,最终耗费的cpu time高达19290067,显然这种游标处理的效率是极其低下的.(尤其很多开发人员还喜欢对此类游标加锁后,单条处理,效率之低,不敢想象)

第二个游标方式的trace文件如下:(批量处理)

PARSING IN CURSOR #5 len=182 dep=0 uid=84 oct=47 lid=84 tim=1357454222243170 hv=3525186369 ad='3aa08740' sqlid='fr3sb9r91w4u1'
declare
  cursor c_a is
    select a from big_data;
type t_a is table of c_a%rowtype;
  v_a t_a;
begin
  open c_a;
  --?úá?′|àí
    fetch c_a bulk collect into v_a;
  close c_a;
end;
END OF STMT
PARSE #5:c=47993,e=48253,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1357454222243163
=====================
PARSING IN CURSOR #7 len=22 dep=1 uid=84 oct=3 lid=84 tim=1357454222243720 hv=3992159408 ad='3aae4de0' sqlid='3w21sgzqz715h'
SELECT A FROM BIG_DATA
END OF STMT
PARSE #7:c=0,e=59,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=3104650627,tim=1357454222243719
EXEC #7:c=1000,e=61,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=3104650627,tim=1357454222243839
*** 2013-01-06 14:37:02.816
FETCH #7:c=572913,e=572454,p=1832,cr=1835,cu=0,mis=0,r=999999,dep=1,og=1,plh=3104650627,tim=1357454222816387
STAT #7 id=1 cnt=999999 pid=0 pos=1 obj=75053 op='TABLE ACCESS FULL BIG_DATA (cr=1835 pr=1832 pw=0 time=633174 us cost=512 size=18637659 card=810333)'
CLOSE #7:c=0,e=2,dep=1,type=3,tim=1357454222816543
EXEC #5:c=586911,e=586709,p=1832,cr=1835,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=1357454222830293

其中的乱码为注释的中文字符.

使用BULK COLLECT 批量处理的方式,显然要快了许多.我们可以看到,它是先执行游标语句SELECT A FROM BIG_DATA,然后一次FETCH出来.一次处理999999行.

第三个游标方式的trace文件如下:(多条处理)

763 PARSING IN CURSOR #6 len=105 dep=0 uid=84 oct=47 lid=84 tim=1357454481979282 hv=97100697 ad='3faaba00' sqlid='46bkjvc2wm8wt'
  764 declare
  765   v_a big_data.a%type;
  766 begin
  767   for x in (select a from big_data) loop
  768    v_a:=x.a;
  769 end loop;
  770 end;
  771 END OF STMT
  772 PARSE #6:c=9998,e=10050,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1357454481979278
  773 =====================
  774 PARSING IN CURSOR #4 len=22 dep=1 uid=84 oct=3 lid=84 tim=1357454481979809 hv=3992159408 ad='3aae4de0' sqlid='3w21sgzqz715h'
  775 SELECT A FROM BIG_DATA
  776 END OF STMT
  777 PARSE #4:c=0,e=25,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=3104650627,tim=1357454481979806
  778 EXEC #4:c=0,e=48,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=3104650627,tim=1357454481980067
  779 FETCH #4:c=1000,e=1012,p=20,cr=4,cu=0,mis=0,r=100,dep=1,og=1,plh=3104650627,tim=1357454481981179
  ...
10778 FETCH #4:c=0,e=78,p=0,cr=1,cu=0,mis=0,r=99,dep=1,og=1,plh=3104650627,tim=1357454482759857
10779 CLOSE #4:c=0,e=2,dep=1,type=3,tim=1357454482759906
10780 EXEC #6:c=780882,e=780310,p=1832,cr=11798,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=1357454482759962

可以看到这种处理方式的CPU time和第二种还是很接近的,只差了一个数量级,这种隐式循环的游标语句,其实也是一种批量处理的过程,它每次读取了多行数据到缓存.

我们可以看到总的FETCH次数只有1万多一点,比第一种的100多万整整降低了100倍.

通过FETCH行中的r值我们可以看到,每次取的是近100行数据,可见这种隐式游标循环也是一种批量处理的过程.

个人一般情况下喜欢第三种方式的游标处理方式,原因有2点:

  • 1,代码简短,省却了游标变量的定义;
  • 2.在不用使用到集合变量情况下(不使用BULK COLLECT时),速度也很快
UFS 功能描述:UFS boot UFS 启动过程介绍:启动配置,启动代码下载过程和安全性 阅读详情

相关推荐

ZYNQ RFSoC 的DAC如何做到从 0到Fs频段 信号输出

之前一直没太了解 RFSoC 的DAC如何输出在 Fs/2 到 Fs 频率范围内的信号,例如 ZCU216中的 ZU49DR,其RF-DAC最大采样率是 9.85GSPS,如果想输出的信号中心频率在5.8G,它是如何有效输出在第二奈奎斯特区域范围的信号的。

weixin_44630490的博客 1551

PLSQL 循环游标 cursor loop fetch into

PLSQL 循环游标 cursor 的一点心得体会set serveroutput on---------------打印输出信息,默认是FALSEdeclare --------------------申明变量,分号结束v_pages number;v_numberPerPage number;v_totalPages number;v_cur sys_refcurso...

ywl470812087的博客 14万+

LTspice基础教程-028.Timestep too small

Q: “Timestep too small” error message A: If the LTspice program can’t find a solution for the guessed time step, then the program decreases the time step and tries again. This can’t work forever. If...

gaoyong_wang的博客 2万+

oracle fetch into数组,oracle存储过程返回数组的方法

oracle 存储过程返回数组的方法:1.建立包create or replace package test isTYPE filename_array IS TABLE OF varchar2(1);filename filename_array;end test;2. 建立存储过程create or replace procedure test_array(v_cfjg out test.fi...

weixin_35275073的博客 1985

深入解析Xilinx IDELAYE2在FPGA时序优化中的关键作用与实战配置

本文深入解析了Xilinx FPGA中IDELAYE2模块在时序优化中的关键作用。作为精密的信号延时微调器,IDELAYE2通过可编程的抽头延迟,有效解决高速接口中数据与时钟的相位偏差问题。文章详细阐述了其必须与IDELAYCTRL配对使用的核心机制,并对比分析了FIXED、VARIABLE和VAR_LOAD三种工作模式的实战配置方法与代码示例,为FPGA工程师提供了解决时序收敛难题的关键硬件配置指南。

pear55的博客 1183

openEuler 20.03 LTS面向RK3399移植系列(3)—openEuler 20.03 LTS面向Firefly RK3399的第一个版本(Linux kernel 4.4)

任务动机:完成openEuler面向RK3399开发板的移植。 任务描述:按照固件烧写准备,固件获取,固件打包和烧写的步骤实现openEuler面向RK3399开发板的移植,整理过程和相关命令记录到文档。 1. 制作openEuler的rootfs.img 1.1 开发环境 树莓派--openEuler系统 openEuler 20.03 LTS 的内测版本镜像,下载。 1.2 具体操作 1.2.1 ssh远程连接树莓派 确定树莓派IP ssh连接 1.2.2 制作rootfs.img

火种源码的机器人技术专栏 2365

SQL执行效率总结

转自:http://www.cnblogs.com/fanyf/p/3302572.html 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1. --...

weixin_34072159的博客 805

接地设计的本质:按电流类型选择物理连接方式

接地是电子系统中实现电位参考、噪声抑制与安全保护的基础技术,其核心原理在于为不同性质的电流提供可控的低阻抗返回路径。从直流到GHz频段,电流的频率特性、能量等级和持续时间决定了接地的物理实现方式——工频安全电流依赖低电阻导体,高频噪声需低感平面或磁珠衰减,ESD脉冲要求受控泄放电阻,浪涌能量则必须通过独立短路径导入大地。这种‘目的决定方式’的设计逻辑,直接关联EMC合规性、信号完整性与系统可靠性。本文聚焦PCB级与设备级工程实践,详解安全地、功能地、浪涌地与静电地的判据差异及六种典型连接策略,帮助硬件工程师

weixin_36369848的博客 258

elif else if oracle_oracle:IF语句 Loop循环 Cursor的用法(一)

1 概述在大多数时候我们在设计pl-sql程序的时候都遵循下面的步骤:打开游标 ->开始循环 -> 从游标中取值->检查那一行被返回 -> 处理 -> 关闭循环 -> 关闭游标2 格式:复制内容到剪贴板/ 程序代码CURSOR IS%ROWTYPE;BEGINOPEN LOOPFETCH INTO ;EXIT WHEN %NOTFOUND;END LOOP;...

weixin_39522408的博客 355

深入解析MOSFET结电容与分布参数:Cgd、Cgs、Cds与Ciss、Crss、Coss的关系与应用

本文深入解析了MOSFET结电容Cgd、Cgs、Cds及其等效参数Ciss、Crss、Coss对开关性能的影响。文章详细阐述了米勒电容Cgd如何导致开关损耗与振荡,并提供了基于电容参数的高频电路选型、驱动设计及PCB布局优化等实战指南,帮助工程师解决开关电源与电机驱动中的常见问题。

weixin_29240711的博客 1275

影楼精修-AI追色算法解析

本文解析了像素蛋糕软件中AI追色功能的技术原理与实现方案,为理解AI追色技术提供了实用参考。

Trent1985的专栏 2万+

ORACLE PL/SQL开发之游标(Cursor)使用

我是本文的作者,以前公司要求在公众号写文章,但是我看已经被墨天轮网站收录了,我想把该文章转发在我的优快云上。 原文链接如下: https://www.modb.pro/db/53331

weixin_63881558的博客 1094

【OpenClaw从入门到精通】第04篇:Web/TUI/钉钉全打通!OpenClaw多端交互实测指南(2026避坑版)

本文详解OpenClaw三大交互方式(Web控制台、TUI终端、钉钉集成),解决新手多端操作难题。Web控制台适合可视化深度配置,TUI终端满足服务器高效运维,钉钉集成实现移动办公协同。提供2026实测配置步骤、代码示例及避坑指南,涵盖设备配对、终端命令优化、聊天机器人回调验证等核心场景,助用户快速掌握"随时召唤AI助理"的全链路方案。 关键词 OpenClaw、多端交互、Web控制台、TUI终端、钉钉集成、AI助理、实操指南 核心亮点 全链路打通:覆盖Web/TIM/IM三端配置

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 3542

mysql游标 效率_PL/SQL中三种游标循环效率对比

这里主要对比以下三种格式的游标循环:1.单条处理open 游标;LOOPFETCH 游标 INTO 变量;EXIT WHEN 条件;END LOOP;CLOSE 游标;2.批量处理open 游标;FETCH 游标 BULK COLLECT INTO 集合变量;CLOSE 游标;3.隐式游标for x in (sql语句) loop...--逻辑处理end loop;以上为工作中常见的几种游标处理...

weixin_42356073的博客 437

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

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

mysql 游标效率_PL/SQL中三种游标循环效率对比

这里主要对比以下三种格式的游标循环: 1.单条处理 open 游标; LOOP FETCH 游标 INTO 变量; EXIT WHEN 条件; END LOOP; CLOSE 游这里主要对比以下三种格式的游标循环:1.单条处理open 游标;LOOPFETCH 游标 INTO 变量;EXIT WHEN 条件;END LOOP;CLOSE 游标;2.批量处理open 游标;FETCH 游标 BUL...

weixin_42128537的博客 580

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Mysql的游标的定义使用及关闭深入分析

Mysql从5.0开始支持存储过程和trigger,给我们喜欢用mysql的朋友们更喜欢mysql的理由了,语法上和PL/SQL有差别,不过搞过编程的人都知道,语法不是问题,关键是思想,大致了解语法后,就从变量定义,循环,判断,游标,异常处理这个几个方面详细学习了。关于游标的用法Mysql现在提供的还很特别,虽然使用起来没有PL/SQL那么顺手,不过使用上大致上还是一样,  定义游标  d

chinajobs的专栏 854

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PL/SQL 记录集合IS TABLE OF的使用

在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集。此时,如果使用基本类型或自定义的记录类型,将会报错。 因此,需要定义一个变量,是某种类型的集合。下面以一个基于表的行类型的集合为例简单介绍一下(相信基本类型同理吧)。 1 DECLARE 2 CURSOR cur_tx IS SELECT GKEY from t ; 3 SUBT...

weixin_30809333的博客 1269

收藏:PL/SQL中使用Bulk Binds来提高性能

原文:来自优快云Kamus' Oracle World的文章在PL/SQL中使用Bulk Binds对性能的提高   测试BULK COLLECT的脚本。 代码:--------------------------------------------------------------------------------SQL&gt; SET TIMING ON;SQL&gt; SQL&gt; ...

weixin_34115824的博客 102

用sql2000做的实验六的部分内容

 SQL实验六 游标的使用和查询优化一、专业、班级学号、姓名、实验时间、地点专    业:计算机科学与技术专业          班级学号: B04—21-21姓    名: 张坤实验时间: 2007年5月                  实验地点:A507二、本实验课的任务本实验是设计性实验。目的在于掌握游标的应用以及关系系统的查询优化。三、实验内容:1.创

Caw_M 638

ORACLE批量更新三种方法比较

在大型的数据库应用中,我们经常会有针对表与表之间的关键建进行字段更新,那么在这个时候,我们就不能写简单的update来实现更新操作,而要针对具体的数据量来进行批量的update,下面几个例子是常用的SQL,将其做个对比,欢迎大家提出更好,更高效的SQL实现。 数据库:Oracle 9i 测试工具:PL/SQL 定义2张测试表:T1,T2 T1--大表 10000条...

weixin_34122548的博客 395

java oracle 批量更新_ORACLE批量更新三种方法比较

在大型的数据库应用中,我们经常会有针对表与表之间的关键建进行字段更新,那么在这个时候,我们就不能写简单的update来实现更新操作,而要针对具体的数据量来进行批量的update,下面几个例子是常用的SQL,将其做个对比,欢迎大家提出更好,更高效的SQL实现。数据库:Oracle 9i 测试工具:PL/SQL定义2张测试表:T1,T2T1--大表 10000条 T1_FK_IDT2--小表 500...

weixin_42284380的博客 2129

ORACLE批量更新四种方法比较

ORACLE批量更新四种方法比较 现在我们有2张表如下: T1--大表 10000笔T1_FK_ID T2--小表 5000笔 T2_PK_ID T1通过表中字段ID与T2的主键ID关联 模拟数据如下: -...

cuixie7913的博客 120

oracle中exit怎么查询的,oracle存储过程中return和exit区别概述及测试

create or replace procedure Test5(o_cellphone in varchar2) isv_cellphone cc_quiz_stat.cellphone %type;v_name cc_quiz_stat %rowtype;v_state cc_quiz_stat.state %type;begindeclarecursor cur_cc isselect *...

weixin_42362003的博客 281

达梦PL/SQL之游标介绍

一、游标的概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是将从数据库中提取的数据块,临时存储到计算机内存中进行处理,从而提高数据处理速度,最后将处理结果显示出来或最终写回数据库,提高数据处理的效率。 游标的类型有两种,一种是静态游标一种是动态游标;而静态游标又分为两种,一种是显示游标,由用户定义、操作,用于处理返回多行数据的select查询;一种是隐式游标,由系统自动进行操作,用于处理DML增删查改insert、delete、select、update返回和单行查询s

weixin_39766655的博客 3530
上一篇: Oracle显示游标的使用及游标for循环
下一篇: 基于Bootstrap的标签页组件bootstrap-tab
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值