ABAP往数据库表中增加一条记录

本文介绍了一个ABAP程序中如何创建并操作自定义表的过程。通过示例代码,演示了如何在表中增加一条记录,包括初始化数据、追加记录、修改表中数据等关键步骤。

背景:实现了一个对话框,然后增加一条记录

REPORT ZTESTJGL.

TABLES: ZTPPJING.

DATA:BEGIN OF GT_ALV OCCURS 0,
  AUFNR LIKE ZTPPJING-AUFNR ,
  END OF GT_ALV.

DATA:LT_BIAO TYPE ZTPPJING.
SELECTION-SCREEN BEGIN OF BLOCK BLK01 
<think> 嗯,用户问的是ABAP中删除数据库数据的方法,正好之前回答过类似问题,可以复用部分内容。不过用户这次特别强调要参考站内引用,得仔细看看提供的三个引用内容。 引用[1]详细列举了四种删除方式,还特别说明了非WHERE删除和WHERE删除的语法区别。引用[2]补充了MODIFY和COMMIT/ROLLBACK的相关操作,引用[3]则是个简单示例。用户应该需要系统性的总结。 注意到用户上次的问题也是关于数据库操作,这次更聚焦在删除方法上。看来用户在学习ABAP数据库交互部分,可能是开发人员或学习者。需要把每种删除方式的适用场景说清楚,特别是容易混淆的FROM位置问题。 值得展开的是引用[1]提到的那个坑:DELETE FROM TABLE删除多行时,只要有一条不存在就返回非零。这个实际开发中很容易出错,要重点说明。另外三种方式(单行、多行、工作区)的sy-subrc处理也值得对比。 准备组织成四种主要方法说明:WHERE条件删除两种(单行/多行)、工作区删除、内批量删除。每种都配上代码片段会更清晰,引用里的示例可以直接用。最后要特别提醒事务控制和性能优化,毕竟实际开发中不能随便删库。 </think> 在ABAP中删除数据库数据主要有以下四种方法,每种方法适用不同场景: --- ### 1. **`DELETE WHERE` 条件删除** - **单行删除**:通过主键精确删除 ```abap DELETE FROM zlion_test WHERE xh = 1. "删除学号=1的记录 IF sy-subrc = 0. WRITE: / '删除成功'. ENDIF. ``` - **多行删除**:通过范围条件批量删除 ```abap DELETE FROM zlion_test WHERE age > 30. "删除年龄>30的所有记录 ``` --- ### 2. **通过工作区删除单行 (`DELETE ... FROM ...`)** ```abap DATA ls_wa TYPE zlion_test. ls_wa-xh = 1. "指定要删除的学号 DELETE zlion_test FROM ls_wa. "删除匹配工作区主键的记录 ``` **注意**:需确保工作区包含完整主键值[^1][^2]。 --- ### 3. **通过内批量删除 (`DELETE ... FROM TABLE ...`)** ```abap DATA lt_tab TYPE TABLE OF zlion_test. APPEND VALUE #( xh = 1 ) TO lt_tab. "添加要删除的学号到内 APPEND VALUE #( xh = 2 ) TO lt_tab. DELETE zlion_test FROM TABLE lt_tab. "批量删除 ``` ⚠️ **关键限制**: - 若内中任意一条记录数据库不存在,整体操作返回 `sy-subrc ≠ 0`(即使其他记录删除成功)[^1][^2]。 --- ### 4. **`DELETE TABLE` 语法差异** - **`WHERE` 删除**:`DELETE FROM table WHERE condition` 适用于动态条件删除。 - **非 `WHERE` 删除**:`DELETE table FROM work_area/itab` 依赖工作区/内中的主键值删除[^1]。 --- ### 事务控制与注意事项 1. **提交与回滚**: ```abap DELETE ... FROM TABLE ... COMMIT WORK. "确认删除 "或 ROLLBACK WORK. "取消删除 ``` 未显式提交时,操作可能被数据库回滚[^2]。 2. **性能优化**: - 批量删除时优先使用 `DELETE FROM TABLE itab` 而非循环删除单行。 - 避免在非主键字段上使用 `DELETE WHERE`(可能触发全扫描)。 --- ### 语法对比总结 | **方法** | **适用场景** | **示例** | |-------------------------|---------------------|-----------------------------------| | `DELETE WHERE` | 条件删除(单/多行) | `DELETE FROM table WHERE field=val` | | `DELETE FROM work_area` | 单行删除(主键) | `DELETE table FROM ls_wa` | | `DELETE FROM TABLE itab`| 批量删除(主键集合)| `DELETE table FROM TABLE lt_itab` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值