2020-09-10 01:27发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我需要从包含数百万条记录的表中删除数据,我假设这将花费数小时和资源,任何人都可以告诉我如何在没有太多系统资源的情况下删除数据。
谢谢
Raj
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条件。
添加
...客户端指定
删除满足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。
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的预订:
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包含主键字段值的所有数据库表行。 除了变体1外,内部表itab的行必须满足与工作区wa相同的条件。
系统字段SY-DBCNT包含已删除的行数,即内部表itab的行数,其关键值是数据库表dbtab中的行。
SY-SUBRC = 0 itab中的所有行都可用于删除dbtab中的行。
SY_SUBRC = 4对于数据库表中内部表的至少一行,没有行具有相同的主键。 找到的所有行都将被删除。
如果内部表itab为空,则SY-SUBRC和SY-DBCNT设置为0。
变体4
删除dbtab版本。
此变量已过时,因为变量1-3允许您动态指定数据库表名称。
删除数据库表中的一行,该行的名称在运行时从字段vers获得。 数据库表必须为ABAP/4字典所知,并且其名称必须符合以下命名约定:它必须以'T'开头,并且可以包含四个附加字符。 字段vers必须包含表名,且不带前导" T"。 当前客户端中仅行被删除。 要删除的行来自静态指定的表工作区dbtab或* dbtab。
SY_SUBRC = 4无法删除任何行,因为指定主键不存在任何行。
感谢与问候
Sreenivasulu P
hii
尝试这个..
我猜它不会消耗很多系统资源
从ZTABLE中选择*。
删除ztable。
endselect。
或
定义一个内部表
选择所有记录到内部表中。
从表内部表中的ztable中删除。
数据:ztable的itab类型表。
从ztable中选择*到表itab中。
从TABLE表中删除ztable。
致谢
Naresh
嗨,Raj,
会执行此操作。
否则,如果您有表维护,则全选并删除条目。
vijay
嗨,拉吉,
您可以尝试
从大小为10000的ztable包中选择*到表itab中。
从表itab中删除ztabls。
这将一次删除10,000条记录,
如果需要从表中删除整个数据,请执行SE14。
最多设置5个标签!
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
hii
尝试这个..
我猜它不会消耗很多系统资源
从ZTABLE中选择*。
删除ztable。
endselect。
或
定义一个内部表
选择所有记录到内部表中。
从表内部表中的ztable中删除。
数据:ztable的itab类型表。
从ztable中选择*到表itab中。
从TABLE表中删除ztable。
致谢
Naresh
嗨,Raj,
删除dbtab。
会执行此操作。
否则,如果您有表维护,则全选并删除条目。
致谢
vijay
嗨,拉吉,
您可以尝试
从大小为10000的ztable包中选择*到表itab中。
从表itab中删除ztabls。
这将一次删除10,000条记录,
嗨,拉吉,
如果需要从表中删除整个数据,请执行SE14。
p>一周热门 更多>