Appearance
SAP OPEN SQL 数据修改命令文档 (2025.04)
一、核心操作命令
1. INSERT 数据插入
abap
" 单行插入
INSERT INTO ztable VALUES @ls_data. " 需完整结构体数据
" 批量插入(支持重复处理)
INSERT ztable FROM TABLE @lt_data
ACCEPTING DUPLICATE KEYS. " 自动跳过主键冲突
关键参数:
ACCEPTING DUPLICATE KEYS
:冲突时跳过记录,SY-SUBRC=4SY-DBCNT
:返回实际插入行数
2. UPDATE 数据更新
abap
" 条件更新(局部字段)
UPDATE ztable SET
field1 = @lv_val1,
field2 = @lv_val2
WHERE id = '001'. " 必须包含主键/索引字段
" 结构体全量更新
UPDATE ztable FROM @ls_data. " 需包含主键字段
注意事项:
- WHERE 条件缺失会导致全表更新
- 结构体更新自动匹配字段名
3. DELETE 数据删除
abap
" 条件删除
DELETE FROM ztable
WHERE create_date < '20230101'. " 需严格验证条件
" 结构体主键删除
DELETE ztable FROM @ls_data. " 等效WHERE主键条件
限制:
- 不支持直接使用内表批量删除(需循环处理)
4. MODIFY 数据合并
abap
" 单行合并(存在则更新,不存在则插入)
MODIFY ztable FROM @ls_data. " 自动检查存在性
" 批量合并
MODIFY ztable FROM TABLE @lt_data. " 原子操作提升性能
二、高级操作技巧
1. 动态SQL
abap
Copy Code
" 动态表名操作
DATA(lv_table) = 'SFLIGHT'.
MODIFY (lv_table) FROM TABLE <itab>.
" 动态字段更新
DATA(lv_set) = 'PRICE = PRICE * 1.1'.
UPDATE sflight SET (lv_set) WHERE carrid = 'LH'.
2. 事务控制
abap
Copy Code
" 显式事务处理
START OF TRANSACTION.
INSERT ...
UPDATE ...
END OF TRANSACTION.
" 隐式事务(MODIFY默认自动提交)
三、性能优化指南
优化策略 | 实现方式 |
---|---|
批量操作 | 使用FROM TABLE 替代循环单条处理 |
索引匹配 | WHERE条件优先使用主键或二级索引 |
事务控制 | 将多次操作包裹在START/END OF TRANSACTION 中 |
字段精简 | UPDATE时仅指定需修改字段(非全量更新) |
系统变量说明:
- SY-SUBRC=0:操作成功
- SY-DBCNT:返回影响行数
四、综合示例
abap
" 带事务控制的批量更新
DATA: lt_update TYPE TABLE OF zsales.
SELECT * FROM zsales
INTO TABLE @lt_update
WHERE status = 'NEW'
UP TO 100 ROWS. " 分页控制
LOOP AT lt_update ASSIGNING FIELD-SYMBOL(<fs>).
<fs>-status = 'PROCESSED'.
ENDLOOP.
START OF TRANSACTION.
UPDATE zsales FROM TABLE @lt_update.
IF sy-subrc = 0.
COMMIT WORK AND WAIT. " 显式提交
ELSE.
ROLLBACK WORK.
ENDIF.
END OF TRANSACTION.