You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SELECT命令向内表写入数据时遇‘内表不可用作工作区’错误求助

错误原因分析

错误提示An internal table is not allowed as a workarea的核心原因:

  • SELECT SINGLE用于读取单条记录,INTO CORRESPONDING FIELDS OF后必须指定结构体类型的工作区(用来存储单条数据)。
  • 你直接传入了内表lt_itab,内表是多条记录的集合,无法作为单条记录的存储载体,因此触发语法错误。
修复方案

步骤1:定义工作区

在现有内表定义后,添加同类型的结构体工作区:

Data: lt_itab TYPE STANDARD TABLE OF ty_itab,
      ls_itab TYPE ty_itab. " 新增工作区,用于存储单条查询结果

步骤2:修改SELECT语句

将原错误的SELECT语句,把目标从内表改为工作区:

SELECT SINGLE * FROM (lv_infotype-infotype) 
       INTO CORRESPONDING FIELDS OF ls_itab " 改为工作区ls_itab
       WHERE sprps = 'X' AND pernr = pernr-pernr.

步骤3:(可选)将数据存入内表

如果需要把查询到的记录保存到内表中,在sy-subrc = 0的判断里追加工作区到内表:

IF sy-subrc = 0.
  ls_itab-infotype = lv_infotype-infotype. " 补充填充自定义的infotype字段(数据库表无此字段)
  APPEND ls_itab TO lt_itab. " 将工作区数据追加到内表
  WRITE: / pernr-pernr, lv_infotype-infotype.
ENDIF.
修复后的关键代码片段
types: BEGIN OF ty_itab,
        pernr       type pernr-mstbr, "Personalnummer
        infotype(6) type c,
        begda       type p0008-begda,
        endda       type p0008-endda,
        UNAME       type p0008-uname,
      END OF ty_itab.
      
Data: lt_itab TYPE STANDARD TABLE OF ty_itab,
      ls_itab TYPE ty_itab. " 新增工作区

...

GET pernr.

LOOP AT c_infotypes INTO lv_infotype.
  CLEAR ls_itab. " 每次循环清空工作区,避免残留数据
  SELECT SINGLE * FROM (lv_infotype-infotype) 
         INTO CORRESPONDING FIELDS OF ls_itab
         WHERE sprps = 'X' AND pernr = pernr-pernr.
  IF sy-subrc = 0.
    ls_itab-infotype = lv_infotype-infotype.
    APPEND ls_itab TO lt_itab.
    WRITE: / pernr-pernr, lv_infotype-infotype.
  ENDIF.
ENDLOOP.
额外优化提示
  • 避免变量命名冲突:代码中TABLES: PERNR定义的全局结构体与数据库表的PERNR字段重名,建议在WHERE条件中保持pernr = pernr-pernr的写法(当前语法正确),或改用更清晰的变量名减少混淆。
  • 循环前清空工作区:每次循环执行CLEAR ls_itab,防止上一次循环的数据残留到当前记录中。

内容的提问来源于stack exchange,提问作者Poseidon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:12:53