[SQL 함수 사용하기]
SELECT구문에서 LOOP를 돌면서 처리하는 형태의 합, 평균을 구하는 방법을 SQL 함수를 이용하여 개선하는 예이다.
DATA : BEGIN OF vbqty OCCURS 0. matnr LIKE vbap-matnr, kwmeng LIKE vbap-kwment, meins LIKE vbap-meins. *-- 개선 전. SELECT matnr kwmeng meins INTO vbqty FROM vbap WHERE …. COLLECT vbqty. ENDSELECT. *----------------------------------------------------------------------* *-- 개선 후. SELECT matnr SUM ( kwmeng ) meins INTO TABLE vbqty FROM vbap WHERE … GROUP BY matnr meins. |
10,000건의 데이터를 처리하였을 경우, 아래와 같은 성능 차이가 나왔다.
개선 전: 2,370,000 microseconds
개선 후: 1,574,000 microseconds
GROUP BY 절은 Pool Table이나 Cluster Table에는 사용될 수 없다(BSEG, VBFA).
[효과적인 Internal Table 작업]
Nested LOOP 처리
Nested LOOP는 BINARY SEARCH를 이용하여 아래와 같이 개선할 수 있다.
DATA : ivbak LIKE VBAK OCCURS 0, Ivbap LIKE VBAP OCCURS 0. SORT : ivbaK BY vebln, ivbap BY vbeln. *-- 개선 전. LOOP AT ivbak. LOOP AT ivbap WHERE vbeln = ivbak-vbeln. WRITE : / … ENDLOOP. ENDLOOP. *-- 개선 후. LOOP AT ivbak. “Work Area에 아무 값도 넘기지 않음. Sy-subrc, sy-tabix를 설정하기 위함. READ TABLE ivbap WITH KEY vbeln = ivbak-vbeln BINARY SEARCH TRASPORTING NO FIELDS. LOOP AT ivbap FROM sy-tabix. IF ivbap-vbeln <> ivbak-vbeln. EXIT. ENDIF. WRITE : / … ENDLOOP. ENDLOOP. |
Ivbak : 5,000 ivbap : 20,000 일 때.
Nested LOOP with WHERE : 5분.
LOOP/READ BINARY SEARCH/LOOP : 15초.
[DML 구문 최적화]
효과적인 UPDATE 기법
SELECT 와 ENDSELECT 사이에서 순환을 하면서 UPDATE 하는 형태는 아래와 같이 WHERE 절을 이용하여 개선할 수 있다.
*-- 개선 전. PARAMETES : pa_vkbur LIKE zvbak-vkbur. SELECT-OPTIONS : so_vbeln FOR zvbak-vbeln. SELECT * FROM zvbak WHERE vbeln IN so_vbeln. zvbak-vkbur = pa_vkbur. UPDATE zvbak. EDNSELECT. *----------------------------------------------------------------------* *-- 개선 후. UPDATE zvbak SET vkbur = pa_vkbur WHERE vbeln IN so_vbeln. IF sy-subrc = 0. COMMIT WORK. ELSE. ROLLBACK WORK. ENDIF. |
[효과적인 LOOP 처리]
Internal Table에서 특정 조건을 만족하는 데이터가 몇 건인지를 알고 싶은 경우에는 다음과 같이 한다.
LOOP AT it1 TRANSPORTING NO FIELDS WHERE bname = ‘smith ’. ADD 1 TO counter. ENDLOOP. |
Internal Table에서특정 조건을 만족시키는 데이터가 있는지 알고 싶다면 아래와 같이 하라.
LOOP AT it1 TRANSPORTING NO FIELDS WHERE vbeln > ‘003000000100 ’. EXIT. ENDLOOP. |
[내부 테이블 간 데이터 복사]
동일한 구조를 가지는 두 개의 내부 테이블 간에 서로 데이터를 복사하고자 할 경우 아래와 같이 한다.
DATA : it1 LIKE eban OCCURS 100 WITH HEADER LINE, It2 LIKE eban OCCURS 100 WITH HEADER LINE. *-- 개선 전. REFRESH it2. LOOP AT it1. MOVE it1 TO it2. APPEND it2. ENDLOOP. *-- 개선 후. It2[] = it1[]. |
[내부 테이블의 데이터 APPEND]
동일한 구조를 가지는 두 개의 내부 테이블간에 서로 데이터를 APPEND 하고자 할 경우에는 아래와 같이 개선한다.
DATA : it1 LIKE eban OCCURS 100 WITH HEADER LINE, It2 LIKE eban OCCURS 100 WITH HEADER LINE. *-- 개선 전. LOOP AT it1. MOVE it1 TO it2. APPEND it2. ENDLOOP. *-- 개선 후. APPEND LINES OF it1 TO it2. |
[내부 테이블의 중복 데이터 삭제] - 많이 사용됨
DELETE ADJACENT DUPLICATES FROM itab [COMPARING field1 field2 …]. |
위 방법을 사용하기 위해서는 비교조건 필드를 기준으로 정렬되어 있어야 한다.
비교조건이 없다면, 모든 필드로 정렬되어 있어야 한다.
내부 테이블 데이터 개수 알아내기
DESCRIBE TABLE itab LINES n. n = lines ( itab ). |
DESCRIBE TABLE itab [LINES lin] [OCCURS n] [KIND knd].
인터널 테이블의 속성을 알고자 할 경우 사용하는 것
LINES | 인터널 테이블의 라인수를 리턴
OCCURS | 인터널 테이블의 초기 SIZE를 리턴
KIND | 인터널 테이블의 종류를 리턴
'T' for standard table
'S' for sorted table
'H' for hashed table
[도메인 값 얻어오기]
SELECT SINGLE ddtext FROM dd07v INTO p_text “CHAR 60 WHERE domname = p_domain “도메인 이름 AND domvalue_l = p_value “도메인 값 AND ddlanguage = sy-langu. |
[통화키 얻어오기]
SELECT SINGLE ktext FROM tcurt INTO p_waerstxt WHERE waers = p_waers AND spras = sy-langu. |
[내부 테이블을 파일로 다운 받고 파일 열기]
call function ' DOWNLOAD ' exporting filename = filename filetype = filetype mode = mode importing act_filename = act_filename tables data_tab = down_itab. call function ' WS_EXECUTE ' exporting program = act_filename inform = '' exceptions prog_not_found. |
[Data Type - RFC Destination]
DATA : rfcdest LIKE rfcdisplay-rfcdest. |
Transaction Code
AbapDocu: ABAP 프로그래밍 예제.
Search_sap_menu: 메뉴 찾기.
ST05 :시스템 –유틸리티 –성능 추적.
STMS: CTS 관리자 .
SE09: CTS 요청.
SE30: 프로그램, 함수 성능 검사.
SQ01: ABAP QUERY.
SM50: 실행 중인 프로그램 목록 보기 .
SU01: 사용자 등록정보(암호 변경 가능) 바꾸기.
ST22: Dump 조회.
AL11: 서버 폴더 목록
참고 : https://m.blog.naver.com/PostView.nhn?blogId=weblogic1&logNo=30052719398&proxyReferer=http:%2F%2Fwww.google.com%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D7%26ved%3D2ahUKEwiUgt75rsvnAhUQ_GEKHSWrBcEQFjAGegQIARAB%26url%3Dhttp%253A%252F%252Fm.blog.naver.com%252Fweblogic1%252F30052719398%26usg%3DAOvVaw3LAxW3sBYcDOGXCDieqrgu
'Ⅰ. ERP > 1. ABAP' 카테고리의 다른 글
[SAP ABAP] 텍스트 정의 방법 ( 텍스트 기호 ) (0) | 2022.11.28 |
---|---|
[SAP ABAP] CALL SCREEN, SET SCREEN (0) | 2022.11.24 |
[SAP ABAP] 시스템변수 | sy-repid, sy-cprog .. (0) | 2022.11.16 |
[SAP ABAP] SAP Memory Parameter (0) | 2022.11.04 |
[SAP ABAP] PAI 에서 AT EXIT-COMMAND (0) | 2022.11.04 |