①此外将内表数据写入数据库,推荐用Modify而不是insert,因为会有些key一样的报dump
loop at it_record.
* 报错
* insert zzphilos0001 FROM TABLE it_record.
* 不报错,不推荐
* insert zzphilos0001 FROM it_record.
* 推荐
modify zzphilos0001 FROM it_record.
endloop.
不循环内表的话也行
* 报错,key的问题
* insert zzphilos0001 FROM TABLE it_record.
* 推荐
modify zztb from table it_record.
if sy-subrc eq 0.
commit work.
else.
rollback work.
endif.
②对数据库操作之后要有判断,进行commit或者rollback,BAPI也有对应的commit和rollback
call function 'BAPI_RESERVATION_CHANGE'
exporting
reservation = v_res_no
tables
reservationitems_changed = it_resitems_changed
reservationitems_changedx = it_resitems_changedx
return = it_return.
loop at it_return.
if it_return-type = 'E' or it_return-type = 'A'.
call function 'BAPI_TRANSACTION_ROLLBACK'.
message it_return-message type it_return-type.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
message s001(00) with 'Change successfully!'.
endif.
endloop.
clear it_return.
③直接对数据库表的更新操作(单个字段)
LOOP AT g_it_alv_stpox ASSIGNING <l_wa_alv>.
UPDATE marc SET zz_bunit = <l_wa_alv>-zz_bunit WHERE werks = <l_wa_alv>-werks
AND matnr = <l_wa_alv>-idnrk.
IF sy-subrc EQ 0.
COMMIT WORK.
<l_wa_alv>-zz_message = l_message_s.
ELSE.
ROLLBACK WORK.
<l_wa_alv>-zz_message = l_message_f.
ENDIF.
ENDLOOP.