SAP ABAP day3

gununoo·2024년 8월 7일
0

SAP ABAP 

목록 보기
3/5

unit 5

structure

TYPES: " structure type
  BEGIN OF ts_flightinfo,
    carrid     TYPE s_carr_id,
    carrname   TYPE s_carrname,
    connid     TYPE s_conn_id,
    fldate     TYPE s_date,
    percentage TYPE p LENGTH 3 DECIMALS 2,
  END OF ts_flightinfo.

DATA: gs_flightinfo TYPE ts_flightinfo. " structure

gs_flightinfo-carrid = 'AA'.
gs_flightinfo-carrname = 'American Airline'.

write:/ gs_flightinfo-carrid, gs_flightinfo-carrname.

결과

AA  American Airline

table

  • Standard Table:
    - 데이터의 순서가 중요하지 않으며, 순차적 접근이 주로 사용됨.

  • Sorted Table:
    - 데이터가 정렬된 상태로 유지되며, 정렬된 상태에서 빠른 검색이 가능함.

  • Hashed Table:
    - 키 값을 기반으로 데이터를 빠르게 검색하며, 데이터의 순서에 관계없이 빠른 성능을 제공함.

접근 유형Standard TableSorted TableHashed Table
인덱스 접근OOX
키 접근OOO
키 유일성XX/OO
  • Standard Table:

    • 인덱스 접근: 인덱스 번호를 사용하여 데이터에 접근 (순차적 접근).
    • 키 접근: 전체 테이블을 순회하여 키를 검색해야 함.
    • 키 유일성: 키 유일성이 없음. 동일한 키를 가진 레코드를 여러 개 가질 수 있음.
  • Sorted Table:

    • 인덱스 접근: 키 값에 따라 정렬된 상태에서 인덱스 접근 가능.
    • 키 접근: 키 값을 사용하여 빠르게 검색할 수 있음.
    • 키 유일성: 키 유일성을 보장할 수 있으며, WITH UNIQUE KEY 옵션으로 유일한 키를 설정할 수 있음.
  • Hashed Table:

    • 인덱스 접근: 해시 알고리즘을 사용하여 인덱스 번호 없이 데이터에 직접 접근.
    • 키 접근: 키 값을 통해 해시 함수를 사용하여 직접 데이터 접근 가능.
    • 키 유일성: 키 유일성이 필수이며, 동일한 키를 가진 레코드를 허용하지 않음.

  • table type 생성


  • standard table
  • standard table이니까 non-unique
DATA: wa1 TYPE zt_03_table_type. " internal table
DATA: wa1 TYPE LINE OF zt_03_table_type. " structure
  • 예제 1
DATA: wa1   TYPE scarr, " structure
      itab1 TYPE TABLE OF scarr. " internal table

wa1-carrid = 'AA'.
wa1-carrname = 'American Airline'.
APPEND wa1 TO itab1.

wa1-carrid = 'KE'.
wa1-carrname = 'Korean Airline'.
APPEND wa1 TO itab1.

wa1-carrid = 'OZ'.
wa1-carrname = 'Asiana Airline'.
APPEND wa1 TO itab1.

LOOP AT itab1 INTO wa1.
  write:/ sy-tabix, wa1-carrid, wa1-carrname.
ENDLOOP.
  • 결과
         1  AA  American Airline
         2  KE  Korean Airline
         3  OZ  Asiana Airline

  • 예제 2
LOOP AT itab1 INTO wa1 where carrid = 'KE'.
  write:/ sy-tabix, wa1-carrid, wa1-carrname.
ENDLOOP.
  • 결과
         2  KE  Korean Airline

  • 예제 3
READ TABLE itab1 INTO wa1 WITH KEY carrid = 'KE'.
WRITE:/ sy-tabix, wa1-carrid, wa1-carrname.
  • 결과
         2  KE  Korean Airline

deleting contents

  • CLEAR: 변수나 내부 테이블을 기본값으로 초기화 (내부 테이블의 구조는 유지됨).
  • REFRESH: 내부 테이블의 데이터만 삭제하고 빈 상태로 초기화 (구조는 유지됨).
  • FREE: 내부 테이블과 관련된 메모리를 해제하고, 데이터 및 메타 데이터를 모두 삭제.

header line internal table (권장 X)

DATA: hit1  TYPE TABLE OF scarr WITH HEADER LINE.

hit1-carrid = 'AA'.
hit1-carrname = 'American Airline'.
APPEND hit1.

hit1-carrid = 'KE'.
hit1-carrname = 'Korean Airline'.
APPEND hit1.

hit1-carrid = 'OZ'.
hit1-carrname = 'Asiana Airline'.
APPEND hit1.

loop at hit1.
  write:/ sy-tabix, hit1-carrid, hit1-carrname.
endloop.
  • 헤더 라인 선언: 내부 테이블과 동일한 구조체를 사용하여 헤더 라인을 선언합니다.
  • 사용 방법: 내부 테이블과 관련된 작업을 할 때 헤더 라인을 사용하여 데이터를 읽거나 쓸 수 있습니다.
  • 단점: 코드 가독성이 떨어지고, 헤더 라인과 내부 테이블 간의 혼동을 일으킬 수 있습니다. 현재는 WITH HEADER LINE 옵션을 사용하는 것보다 명시적으로 WORK AREA를 선언하여 사용하는 것이 더 안전하고 가독성이 좋습니다.

unit 6

data models

  • graphic 버튼
  • 테이블 간의 relation 확인

  • 예제 1
data: wa1 type spfli, " structure
      it1 type table of spfli. " internal table

select *
  from spfli
  into table it1.

cl_demo_output=>display( it1 ).


  • 예제 2: select singe
data: wa1 type scarr, " structure
      it1 type table of scarr. " internal table

select single *
  from scarr
  into wa1 " structure 
 where carrid = 'LH'.

cl_demo_output=>display( wa1 ).

select single 할 땐 into에 structure(work area)만 가능

  • 결과

  • 예제 3: into corresponding fields of
data: wa1 type scarr, " structure
      it1 type table of scarr. " internal table

select single *
  from spfli
  into CORRESPONDING FIELDS OF wa1 " structure 
 where carrid = 'LH'.

cl_demo_output=>display( wa1 ).
  • 결과

  • 예제 4
DATA: BEGIN OF wa1, " structure 
        carrid   TYPE spfli-carrid,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,
        cityto   TYPE spfli-cityto,
      END OF wa1.
DATA: it1 LIKE TABLE OF wa1. " internal table 

SELECT *
  FROM spfli
  INTO CORRESPONDING FIELDS OF TABLE it1
 WHERE carrid = 'LH'.

cl_demo_output=>display( it1 ).
  • 결과

  • 예제 5: 모던 ABAP
DATA: BEGIN OF wa1,
        carrid   TYPE spfli-carrid,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,
        cityto   TYPE spfli-cityto,
      END OF wa1.
DATA: it1 LIKE TABLE OF wa1.

SELECT FROM spfli
  FIELDS *
  WHERE carrid = 'UA'
  INTO CORRESPONDING FIELDS OF TABLE @it1.

cl_demo_output=>display( it1 ).

가장 최신 문법
: select from -> fields -> where -> into

  • 결과

  • 예제 6: client specified
DATA: BEGIN OF wa1,
        mandt    TYPE spfli-mandt,
        carrid   TYPE spfli-carrid,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,
        cityto   TYPE spfli-cityto,
      END OF wa1.
DATA: it1 LIKE TABLE OF wa1.

SELECT *
  FROM spfli
  CLIENT SPECIFIED
  INTO CORRESPONDING FIELDS OF TABLE it1
 WHERE mandt = '810'.

SORT it1 BY carrid connid.

cl_demo_output=>display( it1 ).
  • 결과

abap runtime analysis

  • se30 -> old se30
  • evaluate

  • tips & tricks
  • measure times

buffering

  • se11 -> technical settings


inner join

  • 예제 1
DATA: BEGIN OF wa1,
        carrid   TYPE spfli-carrid,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,
        cityto   TYPE spfli-cityto,
        carrname TYPE scarr-carrname,
      END OF wa1.
DATA it1 LIKE TABLE OF wa1.

SELECT b~carrid b~connid b~cityfrom b~cityto a~carrname
  FROM scarr AS a
  INNER JOIN spfli AS b
  ON a~carrid = b~carrid
  INTO CORRESPONDING FIELDS OF TABLE it1.

cl_demo_output=>display( it1 ).

authorization

  • su21

  • su02

role maintenance

  • t-code pfcg > single role
  • menu > transaction

  • user

authority-check

  • 패턴 > authority-check
  • 코드
AUTHORITY-CHECK OBJECT 'S_CARRID'
         ID 'CARRID' FIELD '*'
         ID 'ACTVT' FIELD '03'. " 조회 권한

IF sy-subrc = 0.
  message e002(zt_msg_03) with sy-uname.
ENDIF.

appending table

  • into table -> overwrite 됨
select *
  from scarr
  into table @DATA(it1)
  where carrid = 'AA'.

select *
  from scarr
  into table it1
  where carrid = 'LH'.

cl_demo_output=>display( it1 ).

  • appending table -> overwrite되지 않고 append 됨
select *
  from scarr
  into table @DATA(it1)
  where carrid = 'AA'.

select *
  from scarr
  appending table it1
  where carrid = 'LH'.

cl_demo_output=>display( it1 ).

기타

  • parameters
    • 프로그램(ex.va01) > 필드 선택 > f1키 > technical information > parameter ID
    • system > user profile > own data > parameters > parameter ID 추가
    • 프로그램 나갔다가 들어와도 값 남아있음

unit 7

selection screen

  • 예제 1
parameters: pa_carr type scarr-carrid default 'LH'.

select *
  from spfli
  into table @DATA(IT1)
  where carrid = @pa_carr.

cl_demo_output=>display( it1 ).


  • 예제 2: 파라미터 추가
parameters: pa_carr type scarr-carrid default 'LH',
            pa_conn type spfli-connid default '0400'.

select *
  from spfli
  into table @DATA(it1)
  where connid = @pa_conn
    and carrid = @pa_carr.

cl_demo_output=>display( it1 ).

  • 파라미터 이름 표시하기
    Goto > Text Elements > selection texts > DDIC Reference 체크

profile
take a look

0개의 댓글