이글은 자료실에 있는 DynamicOpenSql 영문파일을 정리한 것이다.
Dynamic Open SQL.
내역 : SELECT clause, GROUP BY clause. HAVING clause.
문법 : SELECT (lv_select) FROM spfli GROUP BY (lv_group) HAVING (lv_having).
SELECT절 : Alias를 사용할 수 있다. column명, 집합함수를 사용할 수 있다.
GROUP BY절 : 집합함수의 구분자를 SELECT 맞추워 준다.
HAVING절 : 집합함수에 조건을 걸때 사용한다. (Rel6.10 이상부터 사용가능)
기술 : 가) Dynamic Open SQL,
나) Field-Symbols
다) Database TableName을 넘기면 소속 column정보를 가져오는 함수
라) Report Program(Type-1)의 Event처리 기술
마) GUI 기술 pf-status를 사용할 줄알며 구성할 줄 안다.
프로그램 구동내역 설명
1) Selection-Screen에 Parameter 3개를 보여준다.
p_lt : Parameter Less than(보다작다) ==> "<"을 의미함
p_gt : Parameter Greater than(보다크다) ==> ">"을 의미함
p_value : Parameter value
결론 : is > 10, is < 5 의 구성하게 된다.
2) F8 ( start-of-selection)을 누른다. (start-of-select)
Database table [spfli]로부터 column정보를 얻어와서 화면상에 표시한다
표시방법 : [] column명 ex) [] mandt.
3) 원하는 컬럼에 체크한후 pf-status에서 선언한 [main]의 버튼을 누른다
내부 동적SQL절의 로직을 마무리한다.
4) 해당 SQL에 맞는 DATA를 화면에 표시해 준다.
DATA : lo_dref TYPE REF TO data.
프로그램 원문.
*&---------------------------------------------------------------------*
REPORT YTEST_DYNAMIC_OPEN_SQL02.
TYPE-POOLS ABAP.
PARAMETERS: p_lt RADIOBUTTON GROUP 1 DEFAULT 'X',
p_gt RADIOBUTTON GROUP 1,
p_value TYPE I.
DATA: BEGIN OF wa,
count TYPE I.
INCLUDE TYPE SPFLI.
DATA: END OF wa.
DATA: checked,
name TYPE FIELDNAME,
lines TYPE I,
descr_ref TYPE REF TO CL_ABAP_STRUCTDESCR,
sel_list TYPE TABLE OF EDPLINE,
group_list TYPE TABLE OF EDPLINE,
having TYPE STRING,
lv_value1 TYPE I value 1.
FIELD-SYMBOLS: <fs> TYPE ANY,
<comp_wa> TYPE ABAP_COMPDESCR.
START-OF-SELECTION.
SET PF-STATUS 'MAIN'.
* GET ALL COMPONENTS OF TABLE 'SPFLI'
descr_ref ?=
CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( 'SPFLI' ).
LOOP AT descr_ref->COMPONENTS ASSIGNING <comp_wa>.
name = <comp_wa>-name.
WRITE: / checked AS CHECKBOX, name.
ENDLOOP.
LINES = LINES( descr_ref->COMPONENTS ).
AT USER-COMMAND.
* DETERMINE SELECTED COLUMNS
CLEAR: sel_list, group_list.
APPEND 'COUNT(*) AS COUNT' TO sel_list.
DO LINES TIMES.
READ LINE SY-INDEX FIELD VALUE checked.
IF CHECKED = 'X'.
READ LINE SY-INDEX FIELD VALUE name.
APPEND NAME TO: sel_list, group_list.
ENDIF.
ENDDO.
* DETERMINE OPERATOR
IF p_gt = 'X'.
HAVING = 'COUNT(*) > p_value'.
ELSE.
HAVING = 'COUNT(*) < p_value'.
ENDIF.
SELECT (sel_list)
FROM SPFLI UP TO 20 ROWS
INTO CORRESPONDING FIELDS OF WA
GROUP BY (group_list)
HAVING (HAVING). "REMOVE FOR 4.6
* WRITE ALL COMPONENTS TO LIST
WRITE: / WA-COUNT.
LOOP AT group_list INTO NAME.
ASSIGN COMPONENT NAME OF STRUCTURE wa TO <fs>.
WRITE: <fs>.
ENDLOOP.
ENDSELECT.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
42 | ABAP [선언문] 명령어 정리표 Rev01 [57] | 문바이 | 2011.05.18 | 6220 |
41 | ABAP Certi 7.0 요약 정리 [101] | 뽀꼬 | 2011.06.15 | 5661 |
40 | [ABAPDOCU] 뜯어봅시다. 2 [42] | 뽀꼬 | 2011.09.06 | 2147 |
39 | [ABAPDOCU] 뜯어봅시다. 3 [30] | 뽀꼬 | 2011.09.07 | 937 |
38 | [ABAPDOCU] 뜯어봅시다 1 [54] | 뽀꼬 | 2011.09.08 | 1752 |
37 | [ABAPDOCU] 뜯어봅시다 4 [20] | 뽀꼬 | 2011.09.08 | 684 |
36 | [ABAPDOCU] 뜯어봅시다 5 [16] | 뽀꼬 | 2011.09.09 | 556 |
35 | [ABAPDOCU] 뜯어봅시다 6 [22] | 뽀꼬 | 2011.09.14 | 519 |
34 | [번외] Field symbol과 Data reference [14] | 뽀꼬 | 2011.09.14 | 949 |
33 | [ABAPDOCU] 뜯어봅시다 7 [14] | 뽀꼬 | 2011.09.15 | 525 |
32 | [ABAPDOCU] 뜯어봅시다 8 [14] | 뽀꼬 | 2011.09.19 | 466 |
31 | [ABAPDOCU] 뜯어봅시다 9 [15] | 뽀꼬 | 2011.09.20 | 386 |
30 | [ABAPDOCU] 뜯어봅시다 10 [14] | 뽀꼬 | 2011.09.22 | 389 |
29 | [ABAPDOCU] 뜯어봅시다 11 [14] | 뽀꼬 | 2011.09.26 | 385 |
28 | [ABAPDOCU] 뜯어봅시다 12 [7] | 뽀꼬 | 2011.09.28 | 294 |
27 | [ABAPDOCU] 뜯어봅시다 13 [7] | 뽀꼬 | 2011.09.29 | 260 |
26 | [ABAPDOCU] 뜯어봅시다 14 [10] | 뽀꼬 | 2011.09.30 | 275 |
25 | [ABAPDOCU] 뜯어봅시다 15 [7] | 뽀꼬 | 2011.10.04 | 315 |
24 | [ABAPDOCU] 뜯어봅시다 16 [8] | 뽀꼬 | 2011.10.07 | 285 |
23 | [ABAPDOCU] 뜯어봅시다 17 [6] | 뽀꼬 | 2011.10.11 | 484 |
좋은 정보 감사합니다. 잘 보고 갑니다.