133、调试到凌晨的教训:内表访问还能这么写?上周处理一个增强,需求是根据物料号从一万行的内表里取对应描述。我习惯性地写了个LOOP … WHERE,循环里再嵌个READ TABLE,结果一跑,慢得离谱。调试的时候单步走,发现每次READ都要从第一行扫,O(n²)复杂度,数据量一大直接卡死。旁边老工程师瞟了一眼,说:“你干嘛不用表表达式?”我当时一愣,那是什么鬼?他随手改了一行:lv_desc = lt_materials[ matnr = ls_item-matnr ]-maktx。我擦,这么干净?而且性能直接拉满。从那以后,我开始认真研究ABAP 7.40之后的内表新语法。今天这篇笔记,就聊聊让我少掉无数头发的“表表达式”和配套的内表操作新玩法。别急,代码里我都会标上那些容易踩的坑,咱们边看边品。表表达式:把READ TABLE扔进回收站老写法里,按关键字读一行,标配是READ TABLE itab WITH KEY … TRANSPORTING … INTO wa。还得检查SY-SUBRC,麻烦不说,代码里全是噪音。表表达式直接用一个方括号,把“查找”和“字段访问”揉在一起:DATA(ls_row) = lt_data[ key = 'A' ]. " 读整行,没有则RAISE CX_SY_ITAB_LINE_NOT_FOUND这里要特别提醒:如果没找到,直接抛异常,程序会dump。如果你不想要异常,用#NOT_FOUND
