메뉴 건너뛰기

SAP 한국 커뮤니티


이런 종류의 글을 볼때마다 생각나는 점이 있는데,


알고 계시는 분도 있겠지만 모르시는 분들을 위해


모든 분들이 익히 알고 있는 for all entries in 구문에 대해 말씀드리려 합니다.


1. 첫번째는 아마도 다들 알고 계실겁니다..


 


     select <field> from <tab>


        FOR ALL ENTRIES IN


      where <field> = <itab>-<field>


   


 


라는 구문이 있다고 가정할때 <itab>의 엔트리가 한건도 없는 상태라면


where 구문이 생략된 상태의 query를 수행하므로 <tab>의 모든 데이터를


select한다는 점입니다.


 


그래서 SELECT ~ FOR ALL ENTRIES IN ~ 옵션을 쓸때는 반드시


 


 IF NOT <itab>[] IS INIITAL.


     select <field> from <tab>


        FOR ALL ENTRIES IN


      where <field> = <itab>-<field>


 ENDIF.


 


이러한 형식으로 인터널 테이블에 데이터가 있는지 체크해 주어야 한다는 것입니다.


 


2. 그런데, performance측면으로 보자면 for all entries in 이 만능은 아니라는 것입니다.


아마도 막연하게 internal table의 엔트리가 많으면 많을수록 아.. 속도가 느려지는구나라고만


알고 계셨지 어떤 형태로 수행되는지는 모르시는 경우가 많습니다.


 


     select <field> from <tab>


        FOR ALL ENTRIES IN


      where <field> = <itab>-<field>


 


이 구문에서 <itab>의 field 엔트리가 예를들어 'A1', 'A2', 'A3', 'A4', 'A5' 등 5개가 있다고


가정하면 이 구문은 DB interpreter에서 다음과 같은 형태로 해석됩니다.


 


    select "field"


       from "tab"


      where mandt = ...


          and "field" in ( :'A1', :'A2', :'A3', :'A4', :'A5' )


 


그런데, 경험한 분도 있으시겠지만, in조건이 수천개 이상 있을때에 SQL덤프에러가 발생되는것을


우리가 종종 볼때가 있습니다. 그 이유는 in 이 위와 같은 형태로 해석될때


select-option의 in 조건이 너무 많아져 SQL문장이 초과되어 overflow에러를 일으키기 때문입니다. 


 


FOR ALL ENTRIES IN도 그러지 않으리라는 보장은 없겠죠. 단지, 에러는 일어나지 않습니다.


자동으로 적당한(characters 갯수가 정확히 얼마나 되었는지는 까먹었군요 ^^;;)


정도의 in조건으로 분할하여 순차적으로 SQL이 실행되기 때문입니다.


그리고 그 SQL들은 우리생각과는 달리 FULL SCAN이 일어남으로 해서 query속도에 많은손실을


끼치게 됩니다.


따라서, 이 구문을 사용하기전에 대용할 수 있는 테이블이 있는지, 아니면 범위를 좁혀줄 수 있는 수단이


있는지를 먼저 생각하고 사용하는 것이 수행속도 향상에 도움을 줄 수 있을 것입니다.


 


졸필을 이만 마칩니다. ^^;

번호 제목 글쓴이 날짜 조회 수
5705 <img src=3.gif>WM 재고실사 Li12 에 대한 Bapi 혹은 function [2] 가비 2011.01.04 2827
5704 <img src=2.gif>SAP GUI 로그인중 아래와 같은 에러 발생하였습니다. [3] file 늦깍이대뷰자 2011.01.04 2017
5703 <img src=3.gif>maintenance 뷰에서 다운로드 가능한지요? [6] 보람 2011.01.04 1708
5702 <img src=3.gif>원페이퍼에 있는 ECC6.0 폐기 Function List 내용 다시 볼수 없을까요??? [1] beginer 2011.01.03 1419
5701 [re] <img src=2.gif>원페이퍼에 있는 ECC6.0 폐기 Function List 내용 다시 볼수 없을까요??? [2] file Joey 2011.01.03 1175
5700 <img src=3.gif>ALV에서 화면 해상도에 따라 변화되도록 하려면? [2] 열공합시다 2011.01.03 1937
5699 [re] <img src=2.gif>ALV에서 화면 해상도에 따라 변화되도록 하려면? [2] file 강스 2011.01.03 2533
5698 <img src=3.gif>Table control 스크립트 구현(loop)질문 드립니다 . [5] file 안녕아밥 2011.01.03 1428
5697 <img src=2.gif>jsp에서 RFC호출하여 PDF파일 생성을 위해 스마트폼으로 스풀 생성할 때 질문 [1] 짱구 2010.12.31 2260
5696 <img src=3.gif>간단한 조회 프로그램 개발에서 DATA SELECT 질문이요 !! [6] 그저조아 2010.12.31 2103
» [re] <img src=3.gif>간단한 조회 프로그램 개발에서 DATA SELECT 질문이요 !! [1] qwert 2011.01.03 1286
5694 <img src=2.gif>ALV 왼쪽 칼럼에 라인번호 출력하는 방법 [3] 도련님 2010.12.31 2398
5693 <img src=3.gif>모듈 풀 프로그램중 ok_code 에 대해 질문드립니다. [1] file 안녕아밥 2010.12.31 1740
5692 <img src=3.gif>char타입 안에서 불특정 위치의 글자 찾는 방법 있을까요? [3] 행복을 파는 외계인 2010.12.30 1363
5691 <img src=2.gif>ALV Grid 세부사항 보기 질문 드려요. [2] 초밥 2010.12.30 1099
5690 <img src=3.gif>테이블 T180 의 IMG 세팅부분 알고 싶습니다. [2] 여리 2010.12.30 1770
5689 <img src=2.gif>공장달력 세팅 시 효력일 연장 문제 [3] 케케케 2010.12.30 2890
5688 <img src=3.gif>엑셀 업로드 시 이런경우가 발생할 수 있는지요. [7] 열공합시다 2010.12.29 3806
5687 <img src=3.gif>ME21N -구매오더 생성 혹은 구매오더 변경 관련 EXITF & BADI 질문입니다. [3] lucky7. 2010.12.29 2171
5686 <img src=3.gif>"WS_EXECUTE"를 이용한 C# 인쇄프로그램호출시 프린트 에러 [2] 양키 2010.12.29 2665