从表格中删除

2020-09-10 01:27发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要从包含数百万条记录的表中删除数据,我假设这将花费数小时和资源,任何人都可以告诉我如何在没有太多系统资源的情况下删除数据。

谢谢

Raj

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我需要从包含数百万条记录的表中删除数据,我假设这将花费数小时和资源,任何人都可以告诉我如何在没有太多系统资源的情况下删除数据。

谢谢

Raj

付费偷看设置
发送
11条回答
风早神人
1楼-- · 2020-09-10 02:06

Hai Raj Mitta

从数据库表中删除

-从dbtab WHERE条件中删除。

-DELETE FROM(dbtabname)WHERE条件。

-删除dbtab。

-删除* dbtab。

-DELETE(dbtabname)...

-从表itab中删除dbtab。

-从表itab删除(dbtabname)。

-删除dbtab版本。

-删除* dbtab版本。

删除-从数据库表中删除

变量

1。 从dbtab WHERE条件中删除。

DELETE FROM(dbtabname)WHERE条件。

2。 删除dbtab。

删除* dbtab。

删除(dbtabname)...

3。 从表itab删除dbtab。

从表itab中删除(dbtabname)。

4。 删除dbtab版本。

删除* dbtab版本。

效果

删除数据库表中的行。 您可以使用DELETE FROM dbtab ...在程序本身中指定数据库表的名称,也可以在运行时使用DELETE FROM(dbtabname)...将数据库表的名称指定为dbtabname字段的内容。 在这两种情况下,都必须在ABAP/4词典中知道数据库表。 如果您在程序中指定名称,则还必须有一个适当的TABLES语句。 通常只删除当前客户端的数据。 仅当视图引用单个表并且在ABAP/4词典中以维护状态"无限制"创建时,才可以使用视图删除数据。

DELETE属于Open SQL命令集。

注意

DELETE语句不执行授权检查:您必须自己编写这些程序。

变种1

从dbtab中删除WHERE条件。

DELETE FROM(dbtabname)WHERE条件。

添加

...客户端指定

效果

删除满足WHERE子句条件的数据库表中的行。 对于此变体,必须指定WHERE条件。

执行该语句后,系统字段SY-DBCNT包含已删除的行数。

返回代码值设置如下:

SY-SUBRC = 0至少删除了一行。

SY_SUBRC = 4由于未选择任何行,因此未删除任何行。

示例

删除1995年2月28日对汉莎航空0400航班的所有预订(在当前客户中):

TABLES SBOOK。

从SBOOK中删除CARRID ='LH'并且

CONNID ='0400'并且

FLDATE ='19950228'。

注意

要删除表中的所有行,必须指定一个WHERE条件,该条件对于所有行都是正确的。 您可以使用

...在itab中的位置

如果内部表itab为空,则这种情况将选择所有行。

添加

...客户端指定

效果

关闭自动客户端处理。 对于特定于客户端的表,这使您可以删除所有客户端上的数据。 然后将client字段视为普通表字段,您可以在WHERE子句中为其指定合适的条件。

您必须在数据库表名称之后立即指定附加的CLIENT SPECIFIED。

变种2

删除dbtab。

删除* dbtab。

删除(dbtabname)...

添加

1。 ...从wa

2。 ...客户端指定

效果

这些是特定于SAP的简短格式,用于删除数据库表的一行。 如果在程序中指定了数据库表的名称,则要删除的行的主键来自指定的工作区-dbtab或* dbtab。 如果直到运行时才确定数据库表的名称(DELETE(dbtabname)...),则必须添加... FROM wa。

执行该语句后,系统字段SY-DBCNT包含已删除的行数(0或1)。

返回代码值设置如下:

SY-SUBRC = 0删除了该行。

SY_SUBRC = 4无法删除任何行,因为指定主键的行不存在。

示例

删除1995年2月28日汉莎航空0400航班的预订号为3的预订:

TABLES SBOOK。

SBOOK-CARRID ='LH'。

SBOOK-CONNID ='0400'。

SBOOK-FLDATE ='19950228'。

SBOOK-BOOKID ='00000003'。

删除SBOOK。

加法1

...来自wa

效果

获取要删除的行的主键,而不是从表工作区dbtab中获取,而是从显式指定的工作区wa中获取。 在此,根据表工作区dbtab中主键的结构,从wa左右获取键值(请参见TABLES)。 不考虑wa的结构。 因此,工作区wa必须至少与表工作区dbtab中的主键一样宽(请参见DATA),并且工作区wa的对齐方式必须与表工作区中主键的对齐方式相对应。 否则,您将收到运行时错误。

注意

如果未明确指定工作区,则即使该语句出现在表所在的子例程(请参见FORM)或Funktionsbaustein(请参见FUNCTION)中,也要从表工作区dbtab中获取要删除的行的值。 工作区存储在形式参数或同名的局部变量中。

加法2

...客户端指定

效果

与变体1一样。

变种3

从表itab删除dbtab。

从表itab中删除(dbtabname)。

添加

...客户端指定

效果

大量删除:删除内部表itab包含主键字段值的所有数据库表行。 除了变体1外,内部表itab的行必须满足与工作区wa相同的条件。

系统字段SY-DBCNT包含已删除的行数,即内部表itab的行数,其关键值是数据库表dbtab中的行。

返回代码值设置如下:

SY-SUBRC = 0 itab中的所有行都可用于删除dbtab中的行。

SY_SUBRC = 4对于数据库表中内部表的至少一行,没有行具有相同的主键。 找到的所有行都将被删除。

注意

如果内部表itab为空,则SY-SUBRC和SY-DBCNT设置为0。

添加

...客户端指定

效果

与变体1一样。

变体4

删除dbtab版本。

删除* dbtab版本。

注意

此变量已过时,因为变量1-3允许您动态指定数据库表名称。

效果

删除数据库表中的一行,该行的名称在运行时从字段vers获得。 数据库表必须为ABAP/4字典所知,并且其名称必须符合以下命名约定:它必须以'T'开头,并且可以包含四个附加字符。 字段vers必须包含表名,且不带前导" T"。 当前客户端中仅行被删除。 要删除的行来自静态指定的表工作区dbtab或* dbtab。

返回代码值设置如下:

SY-SUBRC = 0删除了该行。

SY_SUBRC = 4无法删除任何行,因为指定主键不存在任何行。

感谢与问候

Sreenivasulu P

何必丶何苦呢
2楼-- · 2020-09-10 02:28

hii

尝试这个..

我猜它不会消耗很多系统资源

从ZTABLE中选择*。

删除ztable。

endselect。

定义一个内部表

选择所有记录到内部表中。

从表内部表中的ztable中删除。

数据:ztable的itab类型表。

从ztable中选择*到表itab中。

从TABLE表中删除ztable。

致谢

Naresh

绿领巾童鞋
3楼-- · 2020-09-10 02:20

嗨,Raj,

删除dbtab。

会执行此操作。

否则,如果您有表维护,则全选并删除条目。

致谢

vijay

95年老男孩
4楼-- · 2020-09-10 02:29

嗨,拉吉,

您可以尝试

从大小为10000的ztable包中选择*到表itab中。

从表itab中删除ztabls。

这将一次删除10,000条记录,

Cikesha
5楼-- · 2020-09-10 02:08

嗨,拉吉,

如果需要从表中删除整个数据,请执行SE14。

p>

一周热门 更多>