首页 > 其他分享 >不要再使用 READ TABLE 了,教你如何使用新语法读取内表

不要再使用 READ TABLE 了,教你如何使用新语法读取内表

时间:2024-11-07 14:15:13浏览次数:6  
标签:flight 内表 READ Read flights ls TABLE carrid

在本文章中,您将了解 ABAP 7.40 版中引入的新读取语法。


该语法早在 2013 年就已引入,因此已不再新鲜。但是,如果您仍在使用 READ TABLE 关键字来读取表项,那么这篇文章绝对适合您。请看下面的示例。


请注意,下面的代码是在读取语句之前编写的。

DATA : it_flights TYPE STANDARD TABLE OF sflight,
       ls_flight  TYPE zjp_order.

SELECT * FROM sflight INTO TABLE it_flights .

 这里可以使用内联数据声明来创建内部表格和工作区,但在顶部明确声明,以便我们可以关注 READ TABLE 语法:

ContextBefore ABAP 7.40From ABAP 7.40
Read with index
number
READ TABLE it_flights INTO ls_flight INDEX 1.ls_flight = it_flights[ 1 ].
Read with index
variable
READ TABLE it_flights INTO ls_flight INDEX lv_idx.ls_flight = it_flights[ lv_idx ].
Read with free keyREAD TABLE it_flights INTO ls_flight
WITH KEY carrid = 'SQ'.
ls_flight = it_flights[ carrid = 'SQ' ].
Read with more than
one free key
READ TABLE it_flights INTO ls_flight WITH KEY carrid = 'SQ'
connid = '0026'.
ls_flight = it_flights[ carrid = 'SQ' connid = '0026' ].

如果您正在试用上述代码示例,请在这些语句之前添加以下代码块。

SELECT * FROM sflight INTO TABLE @DATA(it_flights).
DATA(lv_idx) = 2.

这里需要注意的是,新表达式

  • 不改变 sy-subrc 值
  • 当读取表达式失败时引发异常 CX_SY_ITAB_LINE_NOT_FOUND
"Write read expressions in TRY-CATCH blocks
TRY .
    DATA(ls_flight) = it_flights[ 1 ].

    MESSAGE "Read successful" TYPE 'S'.
  CATCH cx_sy_itab_line_not_found.
    MESSAGE 'Read failed' TYPE 'E'.    
ENDTRY.

当 READ 失败时,控制将转移到 CATCH 块。您可以在 CATCH 块中处理 SY-SUBRC <> 0 的情况。


由于这是一个表达式而不是语句,因此可以在任何操作数位置使用,这在 READ TABLE 语句中是不可能的。

例如

1. 结果中的字段可以使用 - 字段名称。

data(plane_type) = it_flights[ connid = '0026' ]-planetype.

2. 可用于 IF 块

IF it_flights[ connid = '0026' ]-planetype = 'A319'.
  "Do something
ELSE.
  "Do something else
ENDIF.

表达式的结果也可以分配给一个字段符号。在这种情况下,不需要处理异常,只需进行 sy-subrc 检查即可。

ASSIGN it_flights[ carrid = 'SQ' ] to FIELD-SYMBOL(<fs_flight>).
IF sy-subrc EQ 0.
  "Read is successful
ELSE.
  "Read has failed
ENDIF.

如果完全不需要处理 READ 失败的情况,可以使用 OPTIONAL 关键字跳过 try-catch

ls_flight = VALUE #( it_flights[ carrid = 'AA' ] OPTIONAL ).

在这里,你必须小心,因为万一读取失败,变量/结构将是空白的。因此,不要为了避免使用 try-catch 而使用它,只有在实际需要时才使用它。

新 READ 语法中的二分查找

在我结束这篇文章之前,一个重要的问题是--二分查找怎么办?那么,使用排序表就会隐式地使用二分查找。

DATA : it_flights TYPE SORTED TABLE OF sflight 
                  WITH UNIQUE KEY carrid connid.

"Get flight data
SELECT * FROM sflight INTO TABLE it_flights .

"Read with key 
data(ls_flight) = it_flights [ carrid = 'SQ' connid = '0026' ]. 

标签:flight,内表,READ,Read,flights,ls,TABLE,carrid
From: https://blog.csdn.net/SAP_yu/article/details/143592268

相关文章

  • stable diffusion图生图
    本节内容,给大家带来的是stablediffusion的图生图课程,我们在midjourney的课程中有学习过midjourney的图生图功能,即使用垫图的方式来引导AI绘制图片。图生图是AI绘图程序一个非常重要的功能,stablediffusion同样提供了类似的功能,而且stablediffusion图生图功能所提供的选项......
  • stable diffusion 大模型
    本节内容,给大家带来的是stablediffusion的基础模型课程。基础模型,我们有时候也称之为大模型。在之前的课程中,我们已经多次探讨过大模型,并且也见识过一些大模型绘制图片的独特风格,相信大家对stablediffusion大模型已经有了一定的了解。使用不同的大模型,绘制的图片风格,内容,精细......
  • Stable Diffusion LoRA, LyCoris
    本节内容,给大家带来的是stablediffusion的LoRA与LyCoris模型课程。我们在上节课程中,已经详细讲解了关于大模型的使用。在stablediffusion中打造一个大模型,需要基于大量特定特征的图像集进行训练,我们通常将这个过程称之为Dreambooth训练,这个过程比较耗时,同时对计算资源的要求......
  • 【comfyui教程】ComfyUI 现已支持 Stable Diffusion 3.5 Medium!人人都能轻松上手的图
    前言ComfyUI现已支持StableDiffusion3.5Medium!人人都能轻松上手的图像生成利器大家翘首以盼的StableDiffusion3.5Medium模型终于来了!就在今天,StabilityAI正式推出了这款“亲民版”平衡模型,让创作者们得以在消费级GPU上体验到AI图像生成的最新黑科技。本文将带......
  • 21天全面掌握:小白如何高效学习AI绘画SD和MJ,StableDiffusion零基础入门到精通教程!快速
    今天给大家分享一些我长期以来总结的AI绘画教程和各种AI绘画工具、模型插件,还包含有视频教程AI工具,免费送......
  • 【Tableau2023软件下载与安装教程】
    Tableau2023‌是一款强大的数据可视化和数据分析软件,广泛应用于商业智能领域。它通过提供直观的界面和丰富的数据分析功能,使用户能够轻松地从复杂的数据中提取见解和策略,从而加速数据分析和报告生成的过程‌。1、安装包  Tableau2023:链接:https://pan.quark.cn/s/195fd628......
  • 对比山海鲸报表和Tableau,哪款报表软件更好用?
    在数据分析和报表制作的领域,企业往往面临着选择合适工具的难题。尤其是当市场上有很多功能强大的工具时,如何从中挑选出最适合自己需求的报表软件成为了一个关键问题。今天,我们将对比两款报表工具——山海鲸报表和Tableau,看看它们各自的特点和优势,帮助你做出明智的选择。山海鲸报......
  • odoo中对多条数据按条件进行分类汇总 read_group的用法总结并抽取出公式
    今天在工作中遇到一个这样的问题。要求:做一个打印模板实现下面图中的分类汇总 py3o://for="oinobject.delivery_containers_line.read_group(domain=[('delivery_order_id','=',object.id)],fields=['customer_id','delivery_order_id','sales_order_......
  • CMU_15445_P2_Extendible_Hash_Table
    到Project2,我们依然在处理数据库存储相关的部分,从Project1中我们应该Get到两个概念:数据库底层数据操作的基本单元是Page.buffer_pool_manager是管理以及组织数据单元Page的工具,在Project2的第一部分,我们还新增了页面守护(PageGuard)的机制更加优雅的获取以及释放......
  • 解决mysql 的 [HY000][1356] View ‘information_schema.TABLES‘ references invalid
    同事在修改mysql用户权限时修改了关于mysql.infoschema的权限信息,导致无法访问information_schema库下的所有视图,使用数据库连接工具连接MySQL数据库时出现报错情况,使用MySQL终端登录并执行show命令同样报错。报错信息如下:ERROR1356(HY000):View'information_s......