前言
更新内表中所有行的某个字段值,比如全选标记字段,有时候很想用
WHERE 1 = 1 ,ABAP中报错该如何处理?
下面介绍两种方式
方法一
REPORT ztest.TYPES: BEGIN OF ty_item, id TYPE i, sel TYPE abap_bool, END OF ty_item.DATA: lt_data TYPE STANDARD TABLE OF ty_item, ls_data TYPE ty_item.
DO 10 TIMES. INSERT VALUE #( id = sy-index ) INTO lt_data INDEX sy-index.ENDDO.ls_data-sel = abap_true.MODIFY lt_data FROM ls_data TRANSPORTING sel WHERE id IS NOT INITIAL.cl_demo_output=>display( lt_data ).方法二
REPORT ztest.TYPES: BEGIN OF ty_item, id TYPE i, sel TYPE abap_bool, END OF ty_item.DATA: lt_data TYPE STANDARD TABLE OF ty_item, ls_data TYPE ty_item.
DO 10 TIMES. INSERT VALUE #( id = sy-index ) INTO lt_data INDEX sy-index.ENDDO.ls_data-sel = abap_true.MODIFY lt_data FROM ls_data TRANSPORTING sel WHERE ('').cl_demo_output=>display( lt_data ).注意看第13行的不同点,展示 结果跟方法一是一样的.
解释: where 后面括号内括起来的是一个动态的where条件,当为空的时候,相当于不加限制即1 = 1,所以会更新到所有行。