ST05 是 SAP 提供的 SQL 跟踪工具,可以记录程序运行期间所有数据库操作(如 SELECT
、UPDATE
、INSERT
)。通过分析跟踪结果,可以精准定位程序中结构字段对应的数据库表。
步骤1:激活ST05跟踪
- 事务码
ST05
→ 点击 Activate Trace 激活跟踪。- 勾选 SQL Trace(必选)、Enqueue Trace(可选)。
- 设置过滤器(可选):在 Trace Restrictions 中限制用户或程序名,减少无关数据。
步骤2:执行目标操作
- 运行需要分析的事务码(例如
VA01
创建销售订单),执行相关操作(如保存订单)。- 确保操作触发了需要追踪的结构数据加载(如点击保存按钮时程序会读取或更新数据库)。
步骤3:停止跟踪并分析结果
- 返回 ST05 → 点击 Deactivate Trace 停止跟踪 → 点击 Display Trace 查看结果。
- 筛选跟踪结果:
- 在 SQL Trace 页面,按表名、操作类型(如
SELECT
)或程序名过滤。 - 示例:输入表名关键字
VBAP
,筛选所有涉及表VBAP
的操作。
- 在 SQL Trace 页面,按表名、操作类型(如
步骤4:定位关键SQL语句
在跟踪结果中,重点关注以下内容:
-
SELECT 语句:
SELECT * FROM VBAP WHERE VBELN = '0000001234' AND POSNR = '000010'
- 若程序中结构字段(如
VBAP-MATNR
)的值来自此查询,则直接关联到表VBAP
的MATNR
字段。
- 若程序中结构字段(如
-
JOIN 语句:
SELECT A~VBELN, B~MATNR FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN
- 结构字段可能来自多表关联查询(如
VBAK
和VBAP
)。
- 结构字段可能来自多表关联查询(如
步骤5:验证字段映射
-
比对表字段与结构字段:
- 使用事务码
SE11
输入表名(如VBAP
)→ 查看字段列表,确认与程序中的结构字段是否一致。 - 示例:表
VBAP
的字段MATNR
对应结构VBAP-MATNR
。
- 使用事务码
-
结合代码分析:
- 在程序(如
SAPMV45A
)中搜索SELECT
语句,确认是否从跟踪到的表中读取数据。
- 在程序(如
示例:追踪销售订单结构 VBAP
的 MATNR
字段来源
-
激活跟踪:
- ST05 → Activate Trace → 勾选 SQL Trace → 执行事务码
VA01
并保存订单。
- ST05 → Activate Trace → 勾选 SQL Trace → 执行事务码
-
分析跟踪结果:
- 过滤表名
VBAP
,找到类似以下语句:SELECT VBELN, POSNR, MATNR, ARKTX FROM VBAP WHERE VBELN = '0000001234'
- 确认字段
MATNR
来自表VBAP
。
- 过滤表名
-
验证:
- SE11 查看表
VBAP
,其字段MATNR
的数据元素与结构VBAP-MATNR
一致。
- SE11 查看表
关键技巧
-
精确过滤:
- 使用 Program Name(如
SAPMV45A
)或 Client ID 缩小跟踪范围。
- 使用 Program Name(如
-
关注高频操作:
- 多次执行的
SELECT
语句通常是关键数据来源。
- 多次执行的
-
结合调试:
- 使用
/h
启动调试,在代码中设置断点,观察结构赋值与ST05跟踪的SQL语句是否同步触发。
- 使用
常见问题
-
跟踪结果过多:
- 在 Trace Restrictions 中设置更严格的过滤条件(如指定用户、程序或表名)。
-
字段来自多表:
- 若结构字段是多个表字段的组合(如
VBAP-MATNR
可能来自表VBAP
或MARA
),需结合业务逻辑判断优先级。
- 若结构字段是多个表字段的组合(如
-
动态表名:
- 某些程序使用动态表名(如
CONCATENATE 'TABLE_' sy-datum INTO lv_tabname
),需在代码中分析动态逻辑。
- 某些程序使用动态表名(如
总结
通过 ST05 SQL跟踪,可以直接捕获程序运行时访问的数据库表及字段,结合数据字典(SE11)和代码分析,能高效定位结构字段的物理存储位置。此方法尤其适用于复杂程序或无法通过静态分析确定表来源的场景。