OPENSQL 2022.9.1
OPENSQL
SELECT , INSERT ,UPDATE ,DELETE ,MODIFY
SELECT SINGLE…INTO [CORRESPONDING FIELDS OF ] wa WHERE…
SELECT SINGLE … INTO (dobj1,dobj2,…) WHERE…
SELECT… FROM UP TO ROWS…
SELECT…INTO |APPENDING CORRESPONDING FIELDS OF TABLE…
单条插入:在插入时是按照数据库表结构来解析结构 ,与 中的字段名无关,所以的长度只要等于或者要大于所对应表结构的总长度即可
INSERT INTO VALUES
INSERT FROM
多条插入:itab内表的行结构也必须和数据库表的行结构一致;ACCEPTING DUPLICATE KEYS:如果现出关键字相同条目,系统将SY-SUBRC返回4,并跳过该条目,但其他数据会插入进去
INSERT FROM TABLE [ACCEPTING DUPLICATE KEYS]
单条更新:会根据数据库表关键字来更新其他非关键字段。如果WA工作区是自己定义的且未参照数据库表,则WA的结构需要与数据库表相一致,且不能短于数据库表结构,但字段名可任意取
UPDATE dbtab FROM wa
多条更新:主键不会被更新,即使在SET后面指定后也不会被更改
UPDATEdbtab SETf1 = g1 … fi = gi WHERE
UPDATE dbtab FROMTABLE itab 与从WA工作区单条更新原理一样,根据数据表库关键字段来更新,且行结构要与数据库表结构一致,并且不能短于数据库表结构,一样内表行结构组件名可任意
单条删除:下面的WA与Itab原理与Update是一样的
DELETE dbtab FROM wa
多条删除:
DELETE dbtab FROMTABLE itab
DELETEFROM dbtab WHERE
插入或更新:下面的WA与Itab原理与Update是一样的
MODIFY dbtab FROM wa 单行
MODIFY dbtab FROMTABLE itab多行,有就修改,没有就插入
FOR ALL ENTRIES
1.使用该选项后,对于最后得出的结果集系统会自动删除重复行。因此如果你要保留重复行记录时,记得在SELECT语句中添加足够字段
2.FOR ALL ENTRIES IN后面使用的内部表itab如果为空, 将查出当前CLIENT端所有数据(即忽略整个WHERE语句,其他条件都会被忽略)
3.内表中的条件字段不能使用BETWEEN ,LIKE,IN 比较符
4.使用该语句时,ORDER BY 语句和HAVING 语句将不能使用
5.使用该语句时,除COUNT(*)(并且如果有了COUNT函数,则不能再选择其他字段,只能使用在Select…ENDSelect语句中了)以外的所有合计函数(MAX,MIN,AVG,SUM)都不能使用
SELECT vbeln posnr pstyv werks matnr arktx lgort waerk kwmeng
from vbap into table for all entries in lt_matnr
where matnr = lt_matnr-matnr and vbeln in s_vbeln and posnr in s_posnr.
如果上面的lt_matnr 为空,则 “AND vbeln IN s_vbeln AND posnr IN s_posnr” 条件也会忽略掉,即整个WHERE 都会被忽略掉
MODIFY TRANSPORT
modify table itab from wa Transporting f1 f2…
用于指出内表 itab中符合工作区wa关键字的一条记录 f1,f2… 等字段会被wa中的值修改掉