游标:显式游标和隐式游标,系统游标

137、ABAP游标与动态SQL <think>我们根据要求,需要生成一篇≤150字的文章摘要。摘要需涵盖ABAP游标与动态SQL的核心内容,包括隐式游标的问题、显式游标批量处理、动态SQL的常见陷阱和优化效果等。要精简扼要。</think>本文以MES系统报表故障为引,剖析ABAP游标与动态SQL的实践要点:隐式游标循环嵌套导致数据库压力大,显式游标配合批量FETCH可大幅提升性能;动态SQL需警惕注入、转义和语法限制,避免滥用EXEC SQL,优先用RANGES或ADBC。总结出“控制游标粒度、规范动态写法”的优化经验,案例结合原理,对 阅读详情

begin
    语句块中,可以直接编写增删改操作的sql语句;
    insert into stu values(1001,'zhangsan');
    update stu set stuname='zs' where stuid=1001;
    delete from stu where stuid=1001;
    commit;
    在语句块中,如果需要查询(select),不能直接编写查询语句
    如果一定要写查询,必须接收查询结果;接收查询结果,主要依靠游标来接收
end;

显示游标和隐式游标
set serveroutput on;
隐式游标:
declare
    v_no emp.empno%type;--后面用来指定v_no的类型,表示与emp表的empno字段的类型一致;
    v_name emp.ename%type;
    v_sal emp.sal%type;
begin
    select empno,ename,sal into v_no,v_name,v_sal from emp;
    dbms_output.put_line('v_no:'||v_no);
    dbms_output.put_line('v_name:'||v_name);
    dbms_output.put_line('v_sal:'||v_sal);
exception
    when TOO_MANY_ROWS then dbms_output.put_line('返回了太多行了');
end;

上面,接收了一个或有限的几个字段值,如果一张表里有很多字段,而且都要查询的时候?
例子:查询整行:
declare
    empinfo emp%rowtype;--使用变量empinfo来接收emp的一行数据
begin
    select * into empinfo from emp where empno=7369;
    dbms_output.put_line('empno:'||empinfo.empno);
    dbms_output.put_line('ename:'||empinfo.ename);
    dbms_output.put_line('sal:'||empinfo.sal);
end;
使用 rowtype指定类型,并接收数据的时候,必须接收一行完整的数据

上述所有例子中,都只能接收一行以内的数据,如果查询返回了多行呢?--》显式游标

*****************************************************************************************
显式游标
显式游标的使用,分四个步骤:
1.申明游标
2.打开游标
3.提取游标
4.关闭游标

例子1:根据员工编号,查询员工的工资
declare
    v_no emp.empno%type:=7369;
    cursor empinfo is select sal from emp where empno=v_no;--申明游标
    v_sal emp.sal%type;
begin
    open empinfo;--打开游标
    fetch empinfo into v_sal;--提取游标
    dbms_output.put_line('v_sal:'||v_sal);
    close empinfo;--关闭游标
end;

例子2:查询指定员工的名字和工资,同时查询该员工所在部门的名字
declare
    v_no emp.empno%type:=7369;
    cursor empinfo is select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno and e.empno=v_no;--申明游标
    v_sal emp.sal%type;
    v_name emp.ename%type;
    v_dept_name dept.dname%type;
begin
    open empinfo;--打开游标
    fetch empinfo into v_name,v_sal,v_dept_name;--提取游标
    dbms_output.put_line('v_name:'||v_name);
    dbms_output.put_line('v_sal:'||v_sal);
    dbms_output.put_line('v_dept_name:'||v_dept_name);
    close empinfo;--关闭游标
end;

例子3:根据员工编号,查询员工所有信息
declare
    v_no emp.empno%type:=7369;
    cursor v_e is select * from emp where empno=v_no;
    v_emp emp%rowtype;
begin
    open v_e;
    fetch v_e into v_emp;
    dbms_output.put_line('empno:'||v_emp.empno);
    dbms_output.put_line('ename:'||v_emp.ename);
    dbms_output.put_line('sal:'||v_emp.sal);
    dbms_output.put_line('hiredate:'||v_emp.hiredate);
    close v_e;
end;

例子4:查询所有员工信息(多行)
declare
    cursor allemp is select * from emp;
    empinfo emp%rowtype;
begin
    open allemp;
    loop
        fetch allemp into empinfo;
        if allemp%notfound then exit;end if;
        dbms_output.put_line('empno:'||empinfo.empno||',行数:'||allemp%rowcount);
        
        --dbms_output.put_line('ename:'||empinfo.ename);
        --dbms_output.put_line('sal:'||empinfo.sal);
        --dbms_output.put_line('hiredate:'||empinfo.hiredate);        
    end loop;
    if allemp%isopen then close allemp; end if;
end;

for也可以循环游标
DECLARE
    CURSOR allemp IS SELECT * FROM emp;    
BEGIN
    FOR I IN allemp LOOP
        dbms_output.put_line('empno:'||I.empno||',ename:'||I.ename||',行数:'||allemp%rowcount);    
    END LOOP;      
end;

--通过游标修改数据
declare
   cursor userinfo is select * from sporter where sporterid=1001 for update;
   v_name varchar2(50);
begin
   for i in userinfo loop
     v_name :=i.sportername;
     update sporter set sportername='王五' where current of userinfo;
     dbms_output.put_line('用户信息:'||i.sporterid||'-------'||i.sportername);
   end loop;
   commit;
end;

------------------------------------------------------------------------------------------------------------------------

隐式游标和显式游标区别:
隐式:into,接收的结果只能是一行以内的数据;
显式:可以接收一个数据,多个数据,一行数据,多行数据;显式游标不再使用into;
    cursor,sys_refcursor
    cursor只能在存储过程内部使用,超出存储过程范围外,cursor的存储空间会被释放;
    sys_refcursor系统游标的存储空间,是独立于具体的某个存储过程以外的,所以某个存储过程的执行结束(存储过程执行的空间会被释放),不会影响系统游标的数据;
---------------------------------------------------------------
create procedure xxxx(
    zz out cursor
)is
    cursor zz is select * from biao;
begin
    open zz;
    loop
        fetch zz into 变量1,变量2....
        if zz%notfound then exit;end if;
        使用变量中的数据;
    end loop;
    close zz;
end;
--------------------------------------------------------------        
create procedure xxxx(
    yy  out sys_refcursor
)is
begin
    open yy for select * from 表;
end;

5分钟搞懂知识抽取:如何把非结构化数据变成知识图谱的宝藏? 本文通过一个电商评论分析实战案例,详细解析了如何利用spaCy、Neo4j等工具,将非结构化文本数据转化为结构化知识图谱的完整流程。文章重点阐述了知识抽取的核心步骤,包括命名实体识别、关系抽取以及知识存储与查询,帮助读者快速掌握将数据转化为知识宝藏的关键技术。 阅读详情

相关推荐

块坐标下降法实战:如何用Python一步步优化无人机通信网络?

本文通过Python实战案例,详细介绍了块坐标下降法在优化无人机通信网络中的应用。文章以最大化网络吞吐量为目标,将复杂的非凸问题拆解为功率分配和轨迹规划两个子问题,并提供了完整的算法实现、代码示例及调参指南,为机器学习工程师解决类似优化问题提供了实用参考。

sat99的博客 976

【Oracle】游标 显式游标与隐式游标

在使用SQL语句进行查询时,获得和处理的结果是整个查询结果集,若需要进一步查询结果中的每条数据进行业务操作,仅靠SQL语句则无法实现,所以PL/SQL提出游标概念解决此类问题。 游标是一种特殊的指针,提供了对一个结果集进行逐行处理的能力。使用游标可以对结果集按行、按条件进行数据的提取、修改和删除操作。在物理结构上,游标是Oracle为用户开设的一个数据缓冲区,存放SQL语句的执行结果。 在Oracle数据库中执行的每个SQL语句都有对应的单独的游标。Oracle主要由以下两种游标类型:游标主要用于对结果集中

奥利文儿的博客 4519

Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别

      最近在做蓝牙开发,刚接触时傻傻的分不清经典蓝牙和低功耗蓝牙的区别,一直用开发低功耗蓝牙的方法去连接经典蓝牙设备,最后当然是一直连接不上了。在此记录下经典蓝牙和低功耗蓝牙的区别和联系。 Android中的蓝牙         说到Android中的蓝牙,大家听到的可能有蓝牙1.0、蓝牙2.0、蓝牙3.0、蓝牙4.0之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数...

zqf_888的博客 4万+

Oracle(37)区别显式游标和隐式游标

特性显式游标隐式游标定义方式需要用户显式声明和管理由PL/SQL引擎自动创建和管理适用场景适用于复杂的逐行处理操作适用于简单的单行查询操作控制灵活性用户可以灵活控制游标的打开、提取和关闭系统自动管理游标的生命周期示例使用场景多行查询和逐行处理单行查询和简单数据提取性能影响需要手动管理资源,可能影响性能系统自动管理,通常性能较好显式游标和隐式游标各有优缺点,适用于不同的应用场景。显式游标提供了更多的控制和灵活性,适用于需要逐行处理查询结果的复杂操作;

qq_43012298的博客 800

Drools vs URule:5个真实项目场景告诉你如何选择开源规则引擎

本文通过电商风控、物流计费、会员体系、保险定价和物联网告警五个真实项目场景,深度对比了Drools与URule两款开源规则引擎。分析了两者在规则复杂度、性能表现、开发运维及适用场景上的核心差异,为技术选型提供基于实战的决策指南。

k6l7m8n9的博客 945

推荐算法之Thompson(汤普森)采样

如果想理解汤普森采样算法,就必须先熟悉了解贝塔分布。 一、Beta(贝塔)分布 Beta分布是一个定义在[0,1]区间上的连续概率分布族,它有两个正值参数,称为形状参数,一般用α和β表示,Beta分布的概率密度函数形式如下: 这里的Γ表示gamma函数。 Beta分布的均值是: 方差: ...

weixin_30508241的博客 4260

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,...

[color=red]游标的概念:[/color] 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 游标有两种类型:显式游标和隐式游标。在前述程序中用到的...

黑色头发 1890

告别切换烦恼!用Parallels Desktop的Host-Only网卡,在macOS上直接访问虚拟机里的公司内网

本文详细介绍了如何在macOS上使用Parallels Desktop的Host-Only网卡直接访问虚拟机内的公司内网,告别频繁切换操作系统的烦恼。通过配置Host-Only网络模式,实现主机与虚拟机的安全高效通信,特别适合需要频繁访问内网资源的IT从业者。文章包含分步指南、自动化脚本和常见问题解决方案,帮助用户优化工作流程。

weixin_28739079的博客 364

Oracle学习11:游标(cursor)--显式游标&隐式游标、游标四个属性、循环遍历

1.概述 上文PLSQL学习中提到的知识,可以发现,基本都可以通过Java等语言实现,而为了实现程序的可移植性,实际开发工作中我们也是如此做的。 那么PLSQL的重点是什么呢?接下来我们来介绍游标cursor的概念。 之前提到,在不使用显式游标的情况下,PLSQL的中select语句只能返回一条记录,那么我们如果想要返回多条记录,或者遍历整个结果集该如何实现呢。 这里我们可以通过curso...

Liu_Arvin的芝士小栈 5385

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处,

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 5万+

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 695

显示游标、隐式游标、REF游标

游标实际上是一个指针,它在一段Oracle存放数据查询结果集或数据操作结果集的内存中(数据的缓存区),游标就是指向这个缓冲区的一个指针,可以逐行处理查询结果。显式游标就是自己定义的游标,在 PL/SQL 块的声明部分定义查询,该查询可以返回多行。在PL/SQL中使用DML语句时会自动创建隐式游标,隐式游标自动声明、打开和关闭,其名为 SQL。REF 游标和游标变量用于处理运行时动态执行的 SQL 查询,创建游标变量需要先声明 REF 游标类型,再声明 REF 游标类型的变量。

tcz_666的博客 391

【IoT】 产品设计之结构设计:如何设计产品按键

1、硅胶按键功能实现有两种接触方式 1)硅胶按键按压在DOME片(锅仔片)上 通常用在手机、儿童手表手机、防水手机等防水设备上。 2)硅胶按键增加导电基,一种黑色的导电碳粒,实现回路导电 通常用在遥控器、电脑键盘、特殊设备上。 两种方式结构设计原理是一样的,按键的固定与配合间隙与行程要确保好。 2、硅胶遥控器按键的结构方式(导电基) 按键帽为大颗粒实心的,触点为黑色导电基,通过压注成型融合为一体,那么这种按键结构设计时需要注意那些呢? 最主要的是按键按压回弹的手感,由于没有DOME片实现

产品线负责人 8674

【Oracle数据库指南】第12篇:PL/SQL高级特性——异常处理与游标深度解析

PL/SQL异常处理与游标操作详解 本文深入讲解PL/SQL的两大高级特性:异常处理机制和游标操作。主要内容包括: 异常处理机制: 预定义异常(如NO_DATA_FOUND、TOO_MANY_ROWS等) 非预定义异常处理(使用PRAGMA EXCEPTION_INIT关联错误号) 用户自定义异常(实现业务规则验证) 游标操作: 隐式游标(SQL%FOUND等属性) 显式游标(声明、打开、提取、关闭) 游标FOR循环简化操作 REF游标(动态游标) 实战应用: 通过RAISE_APPLICATION_ERR

xyghehehehe的专栏 318

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

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Oracle】PL/SQL 显式游标、隐式游标、动态游标

在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。 在每个用户会话中,可以同时打开多个游标,其数量由数据库初始化参数文件中的OPEN_CURSORS参数定义。 对于不同的SQL语句,游标的使用

Alpha's 学习笔记 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Oracle之游标(显式游标、隐式游标)

Oracle之游标(显式游标、隐式游标) 1. 游标的定义 在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。它为应用等量齐观提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法...

ERA___的博客 2001

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PLSQL——游标(显式游标、隐式游标、REF游标)

游标逐行处理查询结果,以编程的方式访问数据它实际上是一个指针,它在一段Oracle存放数据查询结果集或数据操作结果集的内存中(数据的缓存区),游标就是指向这个缓冲区的一个指针。

m0_72036727的博客 2214

Oracle - 游标基础,显式游标与隐式游标的遍历

Oracle游标基础:显式与隐式游标遍历机制解析 摘要 本文深入解析Oracle数据库中的显式游标与隐式游标的核心差异与应用场景。隐式游标由Oracle自动管理,适用于DML操作和单行查询(SELECT INTO),通过SQL%属性访问状态但无法处理多行数据。显式游标则提供对多行结果集的完全控制,遵循DECLARE→OPEN→FETCH→CLOSE四步生命周期,支持参数化查询和复杂业务逻辑处理。文章通过PL/SQL代码示例演示了两类游标的具体用法,强调显式游标必须手动关闭以避免资源泄漏,并比较了它们在控制粒

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

显式游标、隐式游标

---------------------------游标:指向一个结果集的指针 --便于理解的来说:指针就可以当做是这个结果集,循环这个指针,就可以拿到该结果集里的数据、 分为:隐式游标 和 显式游标 -----------隐式游标:SELECT .... INTO ... --需要注意: 1、查询的结果只能是1行,不能是0行或者多行 2、不需要声明,直接可以使用 -----------显示游标: --声明显式游标的语法结构: DECLARE --声明的部分 CURSOR 游标名[(...

Yunk555的博客 2006

Oracle————游标(显式游标与隐式游标)

游标的概念: 当PL/SQL(Procedural Language/Structured Query Language) 块中执行查询语句(SELECT) 和数据操纵语言(DML-Data Manipulation Language,)时,Oracle会在内存中分配一个缓冲区,缓冲区包含了处理过程的必须信息,即查询语句返回的数据行集。该缓冲区称之为上下文区。游标是指向该缓冲区的句柄或指针。 ...

追梦无惧 1839

人大金仓数据库KingbaseES 隐式、显式游标介绍

KingbaseES、CURSOR、隐式游标、显式游标、人大金仓。

arthemis_14的博客 1058

Oracle学习笔记之显式游标和隐式游标

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

deban1634的博客 1034

Oracle之显式游标与隐式游标

显式游标和隐式游标二者的区别 【oracle】PL/SQL显示游标、隐示游标、动态游标 Oracle显示游标,游标的基本原理: 在Oracle中,在执行一个有SELECT、INSERT、UPDATE和DELETE语句PL/SQL块时,Oracle会在内存中为其分配一个缓冲区,将执行结果放在这个缓冲区中,而游标是该区的一个指针。 游标分类: 静态游标 动态游标。 静态游标又分隐式游标和显示游标。 在每个用户会话中,可以同时打开多个游标,其数量由数据库初始化参数文件中的OPEN_CURSORS参.

weixin_45479126的博客 1492

游标(概念、优点、分类、静态游标的使用(显示游标(显示游标的属性、遍历显示游标、显示游标的FOR循环)、隐式游标(隐式游标的属性))、动态游标的使用、静态游标和动态游标的区别、更新或删除当前游标数据

如前所述,

weixin_43809550的博客 3775

对显式游标、隐式游标的理解

显式游标 显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下。 1、创建测试表,插入 测试数据 CREATE TABLE student1 ( sname varchar (20), sage INTEGER, semall varchar (20), sphone VARCHAR (20), saddress varchar (20) ); insert into STUDE...

weixin_37343255的博客 512

Oracle显式游标和隐式游标

用数据库语言来描述游标就是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等。游标for循环是显示游标的一种快捷使用方式,它使用for循环依次读取结果集中的行数据,当form循环开始时,游标自动打开(不需要open),每循环一次系统自动读取游标当前行的数据(不需要fetch),当退出for循环时,游标被自动关闭(不需要使用close)。在变量声明部分定义的游标是静态的,不能在程序运行过程中修改。

wanghost的专栏 877
上一篇: 语句块中异常处理
下一篇: 存储过程:单变量 到sys_refcursor
好好羊
博客等级 码龄5年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值