如何按字段数过滤SAP表?

Mik*_*lly 2 abap sap-erp sap-data-dictionary

SAP 表 DD02L 列出了 SAP 中的每个表以及每个表中的字段数。例如,根据 T 代码 S_PH0_48000138,PLPO(PM 任务列表)表包含 244 个字段。对于业务报告和使用 SQL,我最多只想看到 5、6 个字段值,但整个表都被复制,所有 244 个字段!

所以,我想知道有多少个透明表包含超过 20 个字段。如果我运行上面的 t 代码,我将花费 10 年时间才能一次完成一张表。

迈克·麦克纳利

我不是一个经验丰富的 ABAPer,所以我不知道如何设置。

Józ*_*zai 6

表DD02L“只是”SAP 中所有表的列表。我没有在这个表中找到任何字段,这可以告诉实际表有多少个字段。

可以使用表DD03L(SAP表字段),它列出了SAP中的所有字段和表。字段按位置列出,这意味着我们可以选择所有存在位置为 21 的字段的表(位置 21 存在 = 表中字段超过 20 个):

SELECT FROM dd02l
       INNER JOIN dd03l
       ON dd02l~tabname  EQ dd03l~tabname  AND
          dd02l~as4local EQ dd03l~as4local AND
          dd02l~as4vers  EQ dd03l~as4vers
       FIELDS dd02l~tabname
       WHERE dd02l~tabclass EQ 'TRANSP' "only transparent tables
         AND dd03l~position EQ '0021'
       INTO TABLE @DATA(lt_dd02l).
Run Code Online (Sandbox Code Playgroud)

结果(内表lt_dd02l)将包含所有表,其中有超过20个字段。我目前使用的是 R/3 系统,查询只花了几秒钟,但仍然有超过 12.000 个表,超过 20 个字段。

*在 Gert Beukema 发表评论后编辑的答案(见下文)

  • 这还计算了具有超过 20 个字段的所有结构,您需要使用 DD02L WHERE TABCLASS EQ 'TRANSP' 进行联接才能仅获取透明表。 (3认同)