Cursor游标

掌握PL/SQL游标与REF CURSOR的高级用法 本文深入探讨了PL/SQL中游标的不同类型及其使用方法,包括显式游标、隐式游标和REF CURSOR。重点讲解了如何通过特定语法简化数据检索和处理过程,以及如何将游标作为参数传递以实现模块化编程。此外,文章还介绍了PL/SQL记录和集合的使用,以及如何创建和操作它们,以便在应用程序中处理来自数据库的多行数据。 阅读详情

一  概念 
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 
二  类型 
  Cursor类型包含三种: 隐式Cursor,显式Cursor和Ref Cursor(动态Cursor)。 
1. 隐式Cursor: 
1).对于Select …INTO…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。例如:Select /Update / Insert/Delete操作。 
2)作用:可以通过隐式Cusor的属性来了解操作的状态和结果,从而达到流程的控制。Cursor的属性包含: 
SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数 
SQL%FOUND  布尔型  值为TRUE代表插入、删除、更新或单行查询操作成功 
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反 
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假 
3) 隐式Cursor是系统自动打开和关闭Cursor. 

-- Created on 2018/8/24 by BECAUSE OF YOU
begin
  -- Test statements here
  update emp2 set comm=500 where ename='WARD';
  if SQL%found then
    dbms_output.put_line('操作成功');
    commit;
    else
       dbms_output.put_line('操作失败');
     end if;
end;

2. 显式Cursor: 
(1) 对于从数据库中提取多行数据,就需要使用显式Cursor。显式Cursor的属性包含: 
游标的属性   返回值类型   意    义  
%ROWCOUNT   整型  获得FETCH语句返回的数据行数  
%FOUND  布尔型 最近的FETCH语句返回一行数据则为真,否则为假  
%NOTFOUND   布尔型 与%FOUND属性返回值相反  
%ISOPEN 布尔型 游标已经打开时值为真,否则为假  

(2) 对于显式游标的运用分为四个步骤: 
   第一步:定义游标---Cursor  [Cursor Name]  IS; 
   第二步:打开游标---Open  [Cursor Name]; 
   第三步:操作数据---Fetch  [Cursor name] 
   第四步:关闭游标---Close [Cursor Name],这个Step绝对不可以遗漏。

              declare
  -- Local variables here
  cursor cemp is select empno,job from emp2;
  pempno emp2.empno%type;
  pjob emp2.job%type;
begin
  -- Test statements here
  open cemp;
  loop
  fetch cemp into pempno,pjob;
  exit when cemp%notfound;
  if pjob='PRESTDENT' then update emp2 set sal=sal+1000 where empno=pempno;
  elsif pjob='MANAGER' then update emp2 set sal=sal+800 where empno=pempno;
  else update emp2 set sal=sal+400 where empno=pempno;
  end if;
  end loop;
  close cemp;
  commit;
  dbms_output.put_line('操作成功');
end;

3. Ref Cursor(动态游标): 
1) 与隐式Cursor,显式Cursor的区别:Ref Cursor是可以通过在运行期间传递参数来获取数据结果集。而另外两种Cursor,是静态的,在编译期间就决定数据结果集。 
2) Ref cursor的使用: 
     第一步、Type [Cursor type name] is ref cursor 
     第二步、 Define 动态的Sql语句 
     第三步、Open cursor 
     第四步、操作数据---Fetch  [Cursor name] 
     第五步、Close Cursor 

4.常见Exception

  1.  错 误 名 称 错误代码    错 误 含 义     
  2. CURSOR_ALREADY_OPEN ORA_06511   试图打开已经打开的游标     
  3.   INVALID_CURSOR  ORA_01001   试图使用没有打开的游标     
  4.   DUP_VAL_ON_INDEX    ORA_00001   保存重复值到惟一索引约束的列中     
  5.   ZERO_DIVIDE ORA_01476   发生除数为零的除法错误     
  6. INVALID_NUMBER  ORA_01722   试图对无效字符进行数值转换     
  7.   ROWTYPE_MISMATCH    ORA_06504   主变量和游标的类型不兼容     
  8.   VALUE_ERROR ORA_06502   转换、截断或算术运算发生错误     
  9.   TOO_MANY_ROWS   ORA_01422   SELECT…INTO…语句返回多于一行的数据     
  10.  NO_DATA_FOUND   ORA_01403   SELECT…INTO…语句没有数据返回     
  11.  TIMEOUT_ON_RESOURCE ORA_00051   等待资源时发生超时错误     
  12.  TRANSACTION_BACKED_OUT  ORA_00060   由于死锁,提交失败     
  13.  STORAGE_ERROR   ORA_06500   发生内存错误     
  14.  PROGRAM_ERROR   ORA_06501   发生PL/SQL内部错误     
  15.  NOT_LOGGED_ON   ORA_01012   试图操作未连接的数据库     
  16. LOGIN_DENIED    ORA_01017   在连接时提供了无效用户名或口令    
2017阿里内推笔试题--算法工程师(运筹优化) 2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3 阅读详情

相关推荐

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 186

open cursor for

oracle中open cursor for 和for cursor in的区别如下:open cursor for 是直接打开游标查询结果,适用于单表查询,结果集一般不会太大。for cursor in是从大量数据中循环获取满足条件的记录,放入游标1、open cursor for 用法:CREATE OR REPLACE PROCEDURE AMLS.TEST(C_RES OUT SYS_RE

LeehomeYU的专栏 7531

OCSP环境搭建--Windows Server 2016

OCSP环境搭建--Windows Server 2016 一. OCSP环境中相关信息 1. 服务器1 操作系统:Win Server 2016 Standard版 IP地址:172.16.0.19/23,网关:172.16.0.1,首选DNS:127.0.0.1 服务器角色:域控制器、证书颁发机构、radius服务器、DNS服务器 ...

CsdnCHong_566的博客 3354

Oracle中Cursor介绍

关键字 概念 类型 异常处理 一  概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 二  类型   Cursor类型包含三种: 隐式Cursor,显式Cu

IT那些事儿 1065

Innovus快捷键大全:从入门到精通的效率提升指南

本文是Innovus快捷键从入门到精通的效率提升指南,旨在帮助芯片后端设计工程师通过掌握核心快捷键,将重复性鼠标操作转化为高效的肌肉记忆,从而显著提升版图设计、编辑和分析的工作流速度。文章系统讲解了视图导航、对象选择编辑、流程管理等关键快捷键组合,并提供了个性化配置与实战策略,助力工程师突破效率瓶颈,实现人机合一的流畅设计体验。

silver的专栏 797

谷歌倾斜摄影数据获取以及转换3DTiles介绍

解析谷歌倾斜模型数据,再一键设置无人值守的情况下,快速将谷歌倾斜摄影模型数据转成3DTiles数据,并在Cesium上进行流畅漫游缩放显示,效果优于官方3DTiiles格式数据

cyber_room的博客 5338

[Oracle整理]动态SQL的使用方法

说明:本内容是工作用到的知识点整理,来自工作中和网络。 代码于Oracle9上测试。 什么时候时动态SQL? 要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现。 静态SQL语句? 所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。 动态SQL语句...

weixin_30369041的博客 298

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 750

oracle sql open cursor for,oracle pl sql CURSOR_ALREADY_OPEN

先创建表:CREATE TABLE TB_USER(ID INTEGER PRIMARY KEY,USER_NAME VARCHAR2(20) NOT NULL,USER_AGE INTEGER NOT NULL);CREATE SEQUENCE SEQ_USERINCREMENT BY 1START WITH 1NOMAXVALUENOCYCLECACHE 10;CREATE OR REPLAC...

weixin_31005543的博客 496

论文超详细精读|万字:2s-AGCN

1. 提出了一种新的双流自适应图卷积网络(2S-AGCN)用于基于骨架的动作识别。**模型中的图的拓扑既可以统一地学习,也可以通过BP算法以端到端的方式单独学习。** 2. 提出了一种同时对**一阶和二阶信息(骨架的长度与方向)建模的双流框架**,在识别精度上有了显著的提高。 它将骨架数据的图结构参数化,并嵌入到网络中,与模型共同学习和更新。 3. 文章主要创新点有两个,一个是双流网络,另外一个是自适应。

IanYue的博客 6385

VMware ESXi 直通GPU

虚拟机需要独享GPU资源,那么就需要用到DirectPath I/O (直通),ESXi hypervisor 把 GPU 设备直接映射成虚机中的 GPU 设备,供应用使用。注意,内存注意一定要勾选预留,否则开机后报错如下:无法打开虚拟机 win10 的电源。1.ESXi主机,管理,硬件,PCI设备,勾选GPU卡,切换直通,会提示要求重启主机,重启主机之后,该GPU设备直通一栏显示为“活动”。先确认虚拟机是否EFI引导:编辑虚拟机 - 虚拟机选项 - 引导选项 - 固件 - EFI。

liwension的博客 6296

oracle sql open cursor for,Oracle PLSQL之cursor取得是open时的数据

当我们定义了一个很复杂的cursor,这个cursor需要执行很长时间,在这个cursor执行的过程中,其它用户又修改了该cursor所引用的表的数据时,cursor得到的是修改前还是修改后的数据呢?答案是cursor得到的始终是cursor在open时的数据,接下来我们将通过一个小实验来验证。首先,session1执行以下匿名块,该匿名块通过cursor取得t1表的所有数据,不过在open cu...

weixin_39811478的博客 971

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CURSOR游标

执行PREPARE使用EXECUTE。FETCH 抓取数据。

记录日常学习笔记 396

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Oracle 游标的使用——游标cursor 和 游标sys_refcursor 的使用

Oracle 游标的使用

Shipley_Leo的博客 1273

Devexpress16.2.6破解工具

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

ABAP游标CURSOR使用

ABAP游标CURSOR使用

woniu_maggie的博客 586

不是可以识别的 cursor 选项_理解Oracel游标CURSOR参数和相关视图V$OPEN_CURSOR

1主题理解游标CURSOR,OPEN_CURSORS参数以及视图V$OPEN_CURSOR, V$SESSION_CACHED_CURSOR2游标概念游标的作用就是用于临时存储从数据库中提取的数据块,由系统或用户以变量的形式定义。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。...

weixin_36053926的博客 1996

oracle定位cursor,oracle cursor 游标

游标:用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。分类:静态游标:分为显式游标和隐式游标。REF游标:是一种引用类型,类似于指针。显式游标:CURSOR 游标名 ( 参数 ) [返回值类型] ISSelect 语句生命周期:1.打开游标(OPEN)解析,绑定。。。不会从数据库检索数据2.从游标中获取记录(FETCH INTO)执行查询,返回结...

weixin_39656513的博客 184

oracle sql 子游标_Oracle中游标Cursor的用法

Oracle中游标Cursor的用法发布时间:2020-06-15 10:45:13来源:亿速云阅读:181这篇文章将为大家详细讲解有关Oracle中游标Cursor的用法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。查询SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的返回值被赋予INTO子句中的...

weixin_39903571的博客 281

sql 游标结果放进表中_理解Oracel游标CURSOR参数和相关视图V$OPEN_CURSOR

1主题理解游标CURSOR,OPEN_CURSORS参数以及视图V$OPEN_CURSOR, V$SESSION_CACHED_CURSOR2游标概念游标的作用就是用于临时存储从数据库中提取的数据块,由系统或用户以变量的形式定义。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。...

weixin_39888018的博客 328

arcpy游标使用(一)——Cursor

摘要 Cursor是一种数据访问对象,可用于在表中迭代一组行或者向表中插入新行。游标有三种形式:搜索、插入或更新。游标通常用于读取和更新属性。 方法概述 方法 说明 deleteRow (row) 删除数据库中的某一行。将删除与游标当前所在位置相对应的行。 insertRow (row) 向数据库中插入新行。 newRow () ...

swagZhou 6484

游标 CURSOR

游标 CURSOR 一、游标概述 游标(cursor)是数据库系统在内存中开设的一个数据缓冲区,存放SQL语句的执行结果。 每个游标都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给变量做进一步处理。 作用:用于定位结果集的行 和 遍历结果集。 游标产生时间:当执行DML SQL语句时; 游标用于存放:结果集 游标有名字吗:有,SQL或用户给他取名 游标如何操作:用FETCH语句逐一从...

SKY的专栏 3943

mysql循环cursor游标模板

原文链接https://www.lskyf.com/post/52 CREATE DEFINER=`root`@`%` PROCEDURE `proce_test`() BEGIN DECLARE v_col1 VARCHAR(32); DECLARE v_col2 VARCHAR(32); DECLARE v_col3 VARCHAR(32); DECLARE flag i...

猿份哥 702

oracle select 变量_Oracle中游标cursor的基本介绍和使用

oracle游标cursor的定义游标是由英文cursor直接翻译过来的,它的定义和理解其实很简单:游标cursor是SQL的内存工作区,由系统或用户定义为变量,就是一个临时的数据存储区域。游标cursor的作用是临时存储从数据库中提取的数据块。在某些情况下,需要将数据从磁盘上存储的表中传输到计算机的内存中进行处理,最后将显示处理结果或最终将其写回数据库。使用游标cursor将提高数据处...

weixin_39664746的博客 843

cursor is oracle 日期_oracle中游标cursor的基本介绍和使用 - Break易站

oracle游标cursor的定义游标是由英文cursor直接翻译过来的,它的定义和理解其实很简单:游标cursor是SQL的内存工作区,由系统或用户定义为变量,就是一个临时的数据存储区域。游标cursor的作用是临时存储从数据库中提取的数据块。在某些情况下,需要将数据从磁盘上存储的表中传输到计算机的内存中进行处理,最后将显示处理结果或最终将其写回数据库。使用游标cursor将提高数据处理的速度,...

weixin_39719101的博客 461

动态游标(REF CURSOR)

2. 动态游标(REF CURSOR)首先 , 游标变量和游标是两个不同的概念 . 与游标相似 , 游标变量是指向多行查游标询的结果集的当前行 . 游标是静态的 , 游标变量是动态的 ,. 同时游标变量并不参与与特定的查询绑定 , 所以可以为任何兼容的查询打开游标变量 , 从而提高灵活性 . 而且 , 还可以将新的值赋予游标变量 , 将它作为参数传递给本地和存储过程 . 游标变量针对每个 PL...

iteye_9670的博客 546

oracle 游标 索引无效,滚动游标失效(Rolling Cursor Invalidations)

在Oracle 10g中DBMS_STATS包针对GATHER_TABLE/INDEX_STATS和DELETE_TABLE/INDEX_STATS等收集统计信息的存储过程提供了AUTO_INVALIDATE选项;该参数允许用户指定是否让那些对统计信息有依存关系的游标失效,举例来说如果SQL游标涉及到的表,索引,列或固有对象的统计信息收到以上存储过程修改时,使用NO_INVALIDATE选项可以指...

weixin_42402664的博客 857
上一篇: Oracle存储函数
下一篇: PL/SQL 例外(异常) exception
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值