FORM write_data .
write 'subroutine Test'.
ENDFORM.
"파라미트 = subroutine 호출하는 구문, 호출받는 구문 사이에 주고받는 값
" 썹루틴 내 data구문을 정의하는 일반적 local 변수가 =
call by value = 넘겨주는 변수와 받는 변수가 다른 메모리 영역
DATA: ahah TYPE c LENGTH 20 VALUE 'call by value test'.
PERFORM call_byvalue USING ahah.
FORM call_byvalue USING VALUE(p_val).
WRITE p_val.
ENDFORM.
call by value test
call by reference -changing : 자신의 메모리를 가지고 있지 않음
USING 은 DATA전달. CHANGING 는 DATA전달 변경
data: AHAH TYPE c LENGTH 50 VALUE 'CALL BY REFERENCE TEST'.
WRITE :/ AHAH.
PERFORM CALL_BYVREF CHANGING AHAH.
WRITE:/ AHAH.
FORM CALL_BYVREF CHANGING HEHE.
HEHE = 'VALUE IS CHANGED'.
ENDFORM.
DATA: GV1 TYPE I VALUE 2,
GV2 TYPE I VALUE 3,
SUM TYPE I.
PERFORM SUM_DATA USING GV1 GV2
CHANGING SUM.
WRITE :/ 'RESULT IS :', SUM.
FORM SUM_DATA USING VALUE(P_VAL1)
VALUE(P_VAL2)
CHANGING VALUE(P_SUM).
P_SUM = P_VAL1 + P_VAL2.
ENDFORM.
ZA21.
DATA: AHAH TYPE C VALUE 'A'. "ahah = 'a'
FIELD-SYMBOLS : TYPE C. "필드 심볼 선언
ASSIGN AHAH TO . "변수를 필드 심볼에
= 'B'. "필드 심볼에 변수 값을 할당
WRITE : 'ahah is : ' , ahah. "값이 b로 변경됨.
data: vava TYPE c VALUE 'a'.
FIELD-SYMBOLS : TYPE any.
assign vava to .
= 'b'.
WRITE : 'vava is = ' , 'vava'.
TYPES : BEGIN OF t_line,
col1 TYPE c,
col2 TYPE c,
END OF t_line.
data: gs_wa TYPE t_line,
gt_itab TYPE HASHED TABLE OF line WITH UNIQUE KEY col1,
key(4) TYPE c VALUE 'col1'.
FIELD-SYMBOLS TYPE any TABLE.
ASSIGN gt_itab to .
DATA: BEGIN OF line,
col1(12) VALUE 'abcdefghij',
END OF line.
FIELD-SYMBOLS : .
ASSIGN line-col1+6(*) TO .
WRITE / .
ASSIGN line-col1+6(6) TO .
WRITE / .
ASSIGN line-col1+5(5) TO .
WRITE / .
예제 10-7
DATA: BEGIN OF gs_str,
coll TYPE char10 VALUE 'KOREA ',
col2 TYPE char10 VALUE 'SEOUL' ,
col3 TYPE char6 VALUE 'twhin',
END OF gs_str.
data: gv_fname TYPE c LENGTH 10,
gv_idx TYPE n.
FIELD-SYMBOLS: LIKE gs_str,
TYPE ANY.
ASSIGN gs_str TO .
DO 3 TIMES.
clear : gv_fname.
gv_idx = sy-index.
gv_fname = 'col'.
CONCATENATE gv_fname gv_idx into gv_fname.
ASSIGN COMPONENT sy-index OF STRUCTURE TO .
WRITE .
ENDDO.
예제 10-8
TYPES : BEGIN OF t_line,
a TYPE char5,
b TYPE char10,
c TYPE char15,
end of t_line.
data: gv_addr(30) TYPE c VALUE 'maybe today is nice day'.
FIELD-SYMBOLS : TYPE t_line.
ASSIGN gv_addr to casting.
write : -a, -b, -c.
예제 10-9
gv_tname = 'gt_itab'.
ASSIGN (gv_tname) to .
data : BEGIN OF gs_data,
var1 TYPE i,
var2 TYPE i,
var3 TYPE i,
end of gs_data,
gt_data like TABLE of gs_data.
FIELD-SYMBOLS : <Fs_Tab> TYPE any table,
<fs_strc> like gs_data.
clear : gs_data.
gs_data-var1 = 10.
gs_data-var2 = 20.
gs_data-var3 = 30.
"쭈니아밥퍼
clear : gs_data.
gs_data-var1 = 40.
gs_data-var2 = 50.
gs_data-var3 = 60.
clear : gs_data.
gs_data-var1 = 70.
gs_data-var2 = 80.
gs_data-var3 = 90.
ASSIGN gt_data to <fs_tab>.
loop at <fs_tab> ASSIGNING <fs_strc>.
write :/ <fs_strc>-var1, <fs_strc>-var2, <fs_strc>-var3.
ENDLOOP.
아밥퍼 2
DATA: GV_VAL1 TYPE C VALUE 'A',
GV_VAL2 TYPE C VALUE 'B',
GV_VAL3 TYPE C VALUE 'C',
GV_VAL4 TYPE C VALUE 'D',
GV_VAL5 TYPE C VALUE 'E'.
DATA: GV_FNAME TYPE CHAR20,
GV_INDEX TYPE N.
FIELD-SYMBOLS type any.
DO 5 TIMES.
CLEAR: GV_FNAME.
GV_INDEX = SY-INDEX.
CONCATENATE 'GV_VAL' GV_INDEX INTO GV_FNAME. "GV_VAL+GV_INDEX => GV_FNAME에 들어가서
ASSIGN (GV_FNAME) TO .
"여기서 GV_FNAME은 CHAR20의 GV_FNAME이 아닌 위에 GV_VAL+GV_INDEX가 된다
"만약 1번째 줄이면 GV_FNAME은 GV_VAL1이 된다.
WRITE: / GV_FNAME, ':', .
ENDDO.
"아밥퍼 3
DATA: BEGIN OF GS_DATA,
VAR1 TYPE CHAR10,
VAR2 TYPE CHAR10,
VAR3 TYPE CHAR10,
END OF GS_DATA,
GT_DATA LIKE TABLE OF GS_DATA.
FIELD-SYMBOLS : ,
<FS_STRC> LIKE GS_DATA.
CLEAR: GS_DATA.
GS_DATA-VAR1 = 10.
GS_DATA-VAR2 = 20.
GS_DATA-VAR3 = 30.
APPEND GS_DATA TO GT_DATA.
CLEAR: GS_DATA.
GS_DATA-VAR1 = 40.
GS_DATA-VAR2 = 50.
GS_DATA-VAR3 = 60.
APPEND GS_DATA TO GT_DATA.
LOOP AT GT_DATA ASSIGNING <FS_STRC>..
DO 3 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STRC> TO .
"1번째 INDEX면 FS_STRC의 첫번째줄이 해당
WRITE: .
ENDDO.
WRITE: /.
ENDLOOP.