abap Loop循环用法

这篇具有很好参考价值的文章主要介绍了abap Loop循环用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LOOP AT itab - Basic Form

LOOP AT itab result [cond 条件]. 
  ... 
  [AT ... 
    ... 
  ENDAT.] 
  ... 
ENDLOOP. 


语句LOOP AT itab的这个变体对每个读取行执行一次LOOP和ENDLOOP之间的语句块。

◾ 输出响应结果确定读取行内容的方式和位置。
◾ 执行循环时使用的表键可以在条件中确定。要么读取所有行,要么指定条件来限制读取哪些行。
◾ AT…ENDAT可用于定义控制级处理的控制结构。

如果将内部表指定为函数方法、构造函数表达式或表表达式的返回值或结果,则会在循环期间保持该值。之后,将无法再访问内部表。

如果在USING key之后没有指定明确的表键名称,则读取行的顺序取决于表类别,如下所示:

◾ 标准表和排序表

通过主表索引中的行号升序读取行。在每个循环过程中,系统字段sy-tabix包含主表索引中当前行的行号。

◾ 哈希表

行按照插入表中的顺序以及语句sort后使用的排序顺序进行处理。在每个循环过程中,系统字段sy-tabix包含值0。

循环将继续运行,直到读取了满足条件的所有表行,或使用语句退出。如果找不到合适的行或内部表为空,则根本不会运行循环。

系统字段

此语句的变体LOOP AT设置系统字段sy-tabix的值:

◾ 在索引表的每个循环中,以及在关联表索引中的当前表行的行号上使用排序键时,都会进行传递。

◾ 在哈希表中以及对值0使用哈希键时。

LOOP AT不会修改sy-subrc。使用ENDLOOP离开循环后,sy-tabix设置为进入循环前的值,适用于sy-subrc:

sy-subrc含义

0循环至少运行了一次。

4循环根本没有运行。

系统字段sy-tfill和sy-tleng也会被填充。

在循环中更改内部表

如果在LOOP的语句块中插入或删除行,则会产生以下影响:在索引表上循环或使用排序键的情况下,插入或删除的行相对于当前行的位置由相应表索引中的行号决定。对于哈希表上的循环,如果使用哈希键,则位置取决于插入顺序。

◾ 如果在当前行之后插入行,则在后续循环过程中处理这些新行。可能会导致无休止的循环。

◾ 如果在当前行之后删除行,则在后续循环过程中不再处理删除的行。

◾ 如果在当前行之前插入行,则每个插入行的内部循环计数器增加一个。这会影响sy-tabix,它也会增加(在索引表上循环或使用排序键的情况下,在随后的循环过程中)。

◾ 如果删除了当前行之前的一行或多行,则内部循环计数器将每删除一行减少一个。对于索引表上的循环或使用排序键的情况,这会影响后续循环过程中的sy-tabix,sy-tabix也会相应减少。

根据上述规则,使用此表替换LOOP中的整个表体将导致循环在下一个循环过程中退出。如果之后将新行添加到表中,则尤其如此。由于这通常会产生不可预测的程序行为,因此无法在循环中以更改模式访问整个表体。如果静态地知道这一点,则类和具有静态地知道的次键的LOOPS中会发生语法错误。否则,出于兼容性原因,语法检查只会返回警告。但是,在运行时,当使用CLEAR、FREE、LOCAL、REFRESH、SORT、DELETE…WHERE等语句以及对itab的所有类型的赋值替换整个表体时,大多数情况下都会发生运行时错误。

ABAP指南编程指南

循环处理

笔记

◾ 如果使用引用变量指定内部表itab,则使用条目中引用的表完全执行循环。对引用变量的任何更改都不会对循环产生影响。在循环完成之前,无法从垃圾回收器中删除关联的对象。如果表由字段符号表示,则也是如此。在循环中实现字段符号后,当输入loop时,仍会使用链接到字段符号的表进行迭代。

◾ 没有隐式选择合适的键或索引。使用的表键或表索引总是唯一指定的。如果有合适的辅助表键但未使用此表键,语法检查将发出警告。应使用钥匙清除此警告。但是,在特殊情况下,可以使用杂注绕过它。

◾ 通常,读取LOOP中的多行比使用语句read TABLE或表表达式读取多个单独的行要好。

◾ 没有可以反转读取行顺序的添加。这必须使用DO、WHILE或FOR迭代来完成,在迭代中,使用read TABLE或表表达式读取各行。然后必须在循环中相应地编程循环条件(参见可执行示例)。
◾ 由于兼容性原因,当替换表体时,循环中没有运行时的唯一情况是在没有指定的次键的情况下读取直接指定的表,并且为输出响应结果指定了工作区。
◾ 使用特殊变量LOOP AT mesh_path,可以在网格路径的最后一个节点上执行循环。
◾ 在某些构造函数表达式中,可以使用迭代表达式和FOR进行进一步形式的表迭代。文章来源地址https://www.toymoban.com/news/detail-643443.html

案例

 DATA name TYPE scarr-carrname VALUE '*'. 
cl_demo_input=>request( CHANGING field = name ). 

DATA: scarr_tab TYPE SORTED TABLE OF scarr 
                WITH UNIQUE KEY carrname, 
      spfli_tab TYPE SORTED TABLE OF spfli 
                WITH NON-UNIQUE KEY carrid. 
SELECT * 
       FROM scarr 
       INTO TABLE @scarr_tab. 

SELECT * 
       FROM spfli 
       INTO TABLE @spfli_tab. 

LOOP AT scarr_tab ASSIGNING FIELD-SYMBOL(<scarr_line>) 
                  WHERE carrname CP name. 
  LOOP AT spfli_tab INTO DATA(spfli_line) 
                    WHERE carrid = <scarr_line>-carrid. 
    cl_demo_output=>write_data( spfli_line ). 
  ENDLOOP. 
ENDLOOP. 
cl_demo_output=>display( ). 

到了这里,关于abap Loop循环用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文带你彻底弄懂js事件循环(Event Loop)

    JavaScript事件循环是JavaScript运行时环境中处理异步操作的机制。它允许JavaScript在执行同步代码的同时处理异步任务,以避免阻塞线程并提供更好的用户体验。 本文将在浏览器异步执行原理基础上带你彻底弄懂js的事件循环机制。 js是单线程的,也就是说同一时刻只能做一件事

    2024年02月08日
    浏览(38)
  • 解释一下Node.js中的事件循环(event loop)

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月05日
    浏览(41)
  • Python学习-流程图、分支与循环(branch and loop)

    1、流程图(Flowchart) 流程图是一种用于表示算法或代码流程的框图组合,它以不同类型的框框代表不同种类的程序步骤,每两个步骤之间以箭头连接起来。 好处: 1)代码的指导文档 2)有助于规划高效率的程序结构 3)便于与他人交流 流程图的思维是至上往下走的,线性逻

    2024年02月21日
    浏览(41)
  • 【PyTorch】6.Learn about the optimization loop 了解优化循环

    现在我们有了模型和数据,是时候通过优化数据上的参数来训练、验证和测试我们的模型了。训练模型是一个迭代过程;在每次迭代中,模型都会对输出进行猜测,计算其猜测中的误差( 损失 ),收集相对于其参数的导数的误差(如我们在上一节中看到的),并使用梯度下

    2024年01月23日
    浏览(30)
  • 在JavaScript中,什么是浏览器事件循环(browser event loop)?

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月07日
    浏览(45)
  • SAP ABAP中的数据类型 Data Types

    简单来说分两种: 数据字典里定义的 在ABAP程序里定义的 1.1 数字型的 用在数学计算里的,表达式里的,表序号里的。 Interger整数型 : INT1 : 1字节整数,0-255 (2的8次方-1) INT2 : 2字节整数,-32768-32767(2的15次方-1,有一位是符号位) INT4 : 4字节整数,-2147483648-2147483647(

    2024年02月03日
    浏览(33)
  • Combinatorial Loop 解决

    遇到想要保留的 Combinatorial Loop(组合逻辑换)如何解决 ? 严重警告: bit流报错 RTL图 确实存在输出又重新接到输入的环境 在xdc文件中加入: 用后面的提示替换中的内容 注意不要带 !!!! 点论 | 组合逻辑环 Combinational loop 知多少 论坛

    2024年02月15日
    浏览(25)
  • 【ubuntu】: /dev/loop0-6 100%

    /dev/loop0 100% 这个提示通常意味着在Linux或类Unix系统中,loop设备(也称为loopback设备或loopback文件系统)已经100%被使用了。Loop设备是一种特殊的块设备,它允许用户将文件作为块设备挂载,通常用于挂载磁盘镜像或ISO文件。 可能是由于以下原因之一: 1:挂载的文件或磁盘镜

    2024年04月25日
    浏览(20)
  • ros::Rate loop_rate(10); loop_rate.sleep(); 在程序中是休眠到一定时间,并不占用CPU时间

    如题 ros::Rate loop_rate(10); loop_rate.sleep(); 在ROS C++ 编写订阅者等功能包时,会用到以上两个函数 经过本人测试和查询,sleep()函数并不占用CPU时间,故如果想用定时器来记录程序执行时间,并不会把休眠的时间加进去(休眠其实就是不占用CPU时间的意思). 实际上,执行sleep()函

    2024年02月02日
    浏览(23)
  • 说好的杀疯了呢?微软 Loop 公测体验

    前几天微软宣布了 loop 进入 public preview,作为一个关注已久的用户,迫不及待的就加入了体验,毕竟最近微软给大家的惊喜太多了(New Bing、Copilot)。真的很想看看 AI 时代的微软能将笔记软件玩出什么样的花样来. Loop 是一个类 Notion 的笔记软件,作为微软的亲儿子,还在娘胎

    2024年02月10日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包