abap Loop循环用法

13 篇文章 0 订阅

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进行进一步形式的表迭代。

案例

 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( ). 
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP面试大全 目录 1. 报表知识 6 1.1 基础知识 6 1.1.1 报表事件,有哪些? 6 1.1.2 报表选择画面 7 1.2 ALV报表 8 1.2.1 ALV报表实现的流程 8 1.2.2 显示ALV常用的两个FM 8 1.2.3 如何设置ALV中的热键 8 1.2.4 ALV显示中的小计 8 1.2.5 FM ALV 和 OO ALV的比较 8 1.3 WRITE LIST 8 2. 数据库知识 9 2.1 基础知识 9 2.1.1 ABAP数据字典有哪些对象或元素? 9 2.1.2 据库提交确认和数据库回滚取消语句 9 2.1.3 什么是LUW 9 2.1.4简述modify 、insert、update对数据库表做操作时的影响 9 2.1.5 要描述域、数据元素、表字段之间的关系 9 2.1.6数据字典有几种缓冲方式,适用范围? 9 2.2 ABAP和数据库 10 2.2.1 ABAP 数据表的主索引是什么?索引的好处与坏处?与建索引的注意事项! 10 2.2.2 ABAP透明表有哪几种数据类(data class)?对数据的存储有什么影响? 10 2.2.3 SAP中有几种表,他们的区别是什么? 10 2.2.4什么是簇表(cluster table)?举出知道的簇表。 10 2.2.5找数据库表,有哪些常用的方法。 10 2.2.6如何建立数据库锁对象,激活锁对象产生的Function Module的名字为什么,在何处查看锁表的情况? 10 2.2.7更新 FM 分为 V1 和 V2,那么首先会执行哪一种更新类型呢?每种类型又是以哪种模式(异步、同步或本地)执行的呢? 11 2.2.7使用OPEN SQL注意原则 11 2.3 与表相关 11 2.3.1 MM模块有哪些常用表格 11 2.3.2 HR模块知识:HR里面存储HR主数据主要用到了哪些表? 11 2.3.3 HR模块知识:HR程序在开发中常用的两个逻辑数据库是什么?分别对其进行描述 12 2.3.4 HR模块知识:HR模块里面,如何修改HR的信息类型,具体如何实现 12 2.3.5财务模块:财务模块开发中常用的表有哪些,简单举例说明: 12 2.3.6 PM 常用的TABLE 12 2.3.6 inner join 与 left-outer join的区别? 13 3. 权限相关 14 3.1 什么是权限对象(Authorization Objects)?在 ABAP 程序中使用哪条语句进行授权检查? 14 3.2 与权限对象有关的事务代码有哪些? 14 4. DIALOG 15 4.1 DIALOG 中的几个事件 15 4.2 何在TABLE CONTROL中实现选中一行或多行的效果 15 4.3 DIALOG 开发的常用几个控件是什么? 15 5. BDC 16 5.1 BDC录屏的事务代码 16 5.2 BDC与BAPI之间的区别 16 5.3 BDC录屏的注意事项 16 5.4谈谈BDC的运行模式和更新模式 16 6. 增强 17 6.1什么叫增强?有哪些方式进行增强? 17 6.1.1 User EXIT 17 6.1.2 Customer exit 17 6.1.3 BADI 17 6.1.4 Enhancement Spot 17 6.2如何建立增强? 17 6.3与增强相关的事务代码有哪些 18 6.4如何进行数据库表字段的增强?Append和Include的方式有何区别? 18 7. SMARTFORMS 19 7.1谈谈SmartForm中,Template和Table表格的区别 19 7.2 SMART FORM如何实现公司LOG打印,其步骤是什么? 19 7.3 smartform 中如何控制段落、单个字符输出格式? 19 8. RFC和 BAPI 20 8.1 RFC 20 8.1.1什么是RFC,有哪些通信模式? 20 8.1.2 RFC中涉及到常用的事务代码有哪些? 20 8.1.3根据调用方式的不同,RFC接口提供了什么样的服务? 20 8.1.4 RFC接口的具体功能包括哪些? 20 8.1.5在通过CALL FUNCTION语句进行远程功能调用的基本模式有哪些 20 8.1.6怎么创建一个支持远程调用的RFC 21 8.1.7怎么调用一个SAP标准RFC 21 8.1.8怎样建立RFC程序?RFC程序传递的参数都是传递值还是引用?如何建立函数组? 21 8.1.9怎么来维护这个DESTINATION(远程目标) 21 8.2 BAPI 21 8.2.1什么是BAPI?你使用过哪些BAPI实现什么功能? 21 8.2.2什么是业务对象类型?它包含哪些主件? 21 8.2.3如何创建一个BAPI? 22 8.2.4编写BAPI的注意事项有哪些? 22 8.2.5谈谈与BAPI相关的事务代码。 22 8.3 RFC 和BAPI的相同之处和不同之处 22 8.3.1 RFC和BAPI的区别? 22 9.其他 23 9.1 基础知识 23 9.1.1 CHECK、EXIT、RETURN命令的区别? 23 9.1.2初始化内表有几种方式? 23 9.1.3 一个程序如何调用另外一个程序 24 9.1.4 在一个程序中如何调用其他事物代码 24 9.1.5在进行画面跳转时,CALL SCREEN与LEAVE TO SCREEN的区别? 24 9.1.6 LOOP 循环和系统字段? 24 9.1.7 MESSAGE消息有哪些类型,含义?如何自定义MESSAGE消息类? 24 9.1.8 ABAP中,如何自定义异常类?如何捕捉异常? 24 9.1.9什么是事物变式?事务变式有什么用? 25 9.1.10 RANGE 25 9.1.11对于FIELD SYMBOL赋值将使用 25 9.1.12 Perform 调用子程序时,using ,tables,changing 3个参数分别有什么影响? 25 9.1.13如何在程序间传送数据? 25 9.2 延伸 26 9.2.1自定义搜索帮助有几种方式?如何实现 26 9.2.2怎么创建number range 26 9.2.3 function module中,如何给出错误消息? 26 9.2.4如何优化ABAP程序? 26 9.2.5前导零的处理方式 27 9.2.6 程序事件和系统事件 27 9.2.7如何建立一个外部数据库的连接 27 9.2.8怎样从文件服务器上读取文件?和写文件到文件服务器上? 27 9.2.9 SAP 包括哪些传输技术 27 9.2.10如何将内表数据转换成一个XML文件? 28 9.2.11怎么导出一个WSDL文件? 28 9.2.12怎么导入一个WSDL文件? 28 9.2.13创建后台程序的TCODE是什么,如何在程序里面调用后台程序 28 9.2.14 webservice 28 9.2.15什么叫BTE (Business Transaction Event),BTE的两种类型? 28 9.2.16现阶段接口开发使用的技术 29 9.2.17将一个RFM(Remote-Enabled Module)创建一个WEB SERVICE都有什么相关的事务代码? 29 9.2.18 esb使用 29 10.常用T-CODE 30

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值