1、參數引用傳遞(Parameters Passed by Reference)
使用USING或CHANGING不帶value關鍵字來聲明參數引用傳遞。代碼樣例:
FORM subr USING p1 [{TYPE type}|{LIKE field}]
p2 [{TYPE type}|{LIKE field}]
...
CHANGING p1 [{TYPE type}|{LIKE field}]
p2 [{TYPE type}|{LIKE field}]
...
在引用傳遞的方式,參數不在堆中佔有記憶體,傳入的是變數的位址,在副程式中對變數的修改實際上是對實際參數的修改。在這種方式using和changing是等價的。
2、輸入參數傳值傳遞(Input Parameters That Pass Values)
使用USING帶value關鍵字來聲明輸入參數傳值傳遞。代碼樣例:
FORM subr USING value(p1) [{TYPE type}|{LIKE field}]
value(p2) [{TYPE type}|{LIKE field}]
...
在輸入參數傳值傳遞的方式,參數在堆中佔有記憶體,傳入的是變數的值,在副程式中對變數的修改不會對實際參數的造成修改。
3、輸出參數傳值傳遞(Output Parameters That Pass Values)
使用USING帶value關鍵字來聲明輸入參數傳值傳遞。代碼樣例:
FORM subr CHANGING value(p1) [{TYPE type}|{LIKE field}]
value(p2) [{TYPE type}|{LIKE field}]
...
在輸出參數傳值傳遞的方式,形式參數在堆中佔有記憶體,傳入的是變數的值,在副程式中對變數的修改只有正常結束 (Endform,CHECK,EXIT等語句結束)時才會有形式參數拷貝到對實際參數,如果是錯誤消息退出則不會影響實際參數。
4、local的使用
Local語句可以保護在子過程對總體變數的修改不會影響到子過程之外。特別是在子過程裏不能直接使用Tables定義工作區,既是你將TABLES語句寫在子過程裏,該工作區也是全局性的。如果你需要定義副程式內的工作區,你可以先用tables定義一個全局的,再在副程式裏使用local定義本地的,代碼樣例如下:
REPORT demo_mod_tech_local.
TABLES sflight.
PERFORM tabtest1.
WRITE: / sflight-planetype, sflight-price currency sflight-currency.
PERFORM tabtest2.
WRITE: / sflight-planetype, sflight-price currency sflight-currency.
FORM tabtest1.
sflight-planetype = 'A310'.
sflight-price = '150.00'.
WRITE: / sflight-planetype, sflight-price currency sflight-currency.
ENDFORM.
FORM tabtest2.
LOCAL sflight.
sflight-planetype = 'B747'.
sflight-price = '500.00'.
WRITE: / sflight-planetype, sflight-price currency sflight-currency.
ENDFORM.
公告版位
- Jul 18 Wed 2007 23:40
ABAP--關於abap的subroutines的幾個注意點
close
全站熱搜
留言列表
發表留言