메뉴 건너뛰기

SAP 한국 커뮤니티

[ABAP] Dynamic SQL ( WHERE clause )

문바이 2011.11.19 00:35 조회 수 : 3559

 이글은 자료실에 있는 DynamicOpenSql 영문파일을 정리한 것이다.

 

Dynamic Open SQL.

내역 : WHERE clause 

 

 문법 : SELECT * FROM spfli WHERE (lv_where).
        WHERE 절에 사용되는 형식은 아래와 같이 사용될 수 있다.
        1) Character , Internal table ( embeded character )  Rel4.6D이하(권장)
        2) String    , Internal table ( embeded string    )  Rel6.10이상(권장)
           => internal Table( 하기 사항을 생각한 후 선택한다)
              장점 : Debugging하기가 유리한다.
              단점 : 변수선언 등의 코딩라인 증가


 기술 : 가) Dynamic Open SQL

 

프로그램 구동내역 설명
        1) Select Screen을 통해 Parameter 3개를 입력 받을 수 있도록 구성한다.
        2) 동적변수의 선택.
           버젼호환성을 생각한다면 Character Type
           버젼호환성을 생각안한다면  String Type(적극추천)
        3) 동적변수의 Internal Table화
           조건이 복잡하다면 Internal Table
           조건이 복잡안하다면 String(적극추천)=>테이블이 1개를 대상으로 하므로 대부분 복잡도가 높지않음
        4) concatenate 명령을 통해 검색 where조건을 만든다
           주목해야 할것은 P_Depart, P_Arrive를 String문장안에 직접기입하였다.

 

 

프로그램 원문.
*&---------------------------------------------------------------------*

REPORT   YTEST_DYNAMIC_OPEN_SQL01.

 parameters: P_Depart    type spfli-cityfrom,
             P_Arrive    type spfli-cityto,
             op_and    radiobutton group 1 default 'X',
             op_or     radiobutton group 1.

 data: where_clause type string,
       operator(3)  value 'AND',
       carrid       type spfli-carrid,
       connid       type spfli-connid.

 DATA : lt_itab like STANDARD TABLE OF spfli,
        ls_itab like spfli.

 constants: tabname(10) value 'spfli'.

 if op_or = 'X'.
   operator = 'OR'.
 endif.

 concatenate ' cityfrom = P_Depart '
               operator
             ' cityto = P_Arrive '
   into where_clause SEPARATED BY space.

 select carrid connid cityfrom cityto
     from (tabname)
     into CORRESPONDING FIELDS OF TABLE lt_itab
     where (where_clause).

 loop at lt_itab into ls_itab.
   write: / ls_itab-carrid, ls_itab-connid, ls_itab-deptime, ls_itab-arrtime.
 ENDLOOP.

** write: / carrid, connid, P_Depart, P_Arrive.