반응형

    앞 포스팅에서 Internal table에 값을 넣고, 읽는 것을 해보았습니다. 이제 읽었으니 변경하고 삭제하는 순서가 남았습니다.

     

    1) MODIFY

    SAP에서 Modify는 Insert + Update 기능을 복합적으로 수행하는 구문입니다. 없으면 Insert 해주고 있으면 Update를 해줍니다. 하지만 이는 DB 테이블에 적용되는 기능이고 Internal table에는 Update기능을 가집니다. 

    비어 있는 Internal table에는 Append로 데이터를 추가하고 Modify는 Update기능으로 사용 해야하겠습니다.

     

    1-1) INDEX를 이용한 Update 

    Index table(Standard, Sorted table)에서 Internal Table의 한 라인을 읽었다는 것은 읽은 행 번호 즉 SY-TABIX에 값이 들어왔다고 생각할 수 있습니다. 그럼 데이터의 변경 후 그 Line에 Update 해주면 되겠지요. 이것이 기본적인 MODIFY 구문입니다. TRANSPORTING 옵션의 사용하여 원치 않는 필드의 Update를 원천에 막는 것도 좋습니다.

    LV_TABIX 변수에 index 번호를 받아서 Update에 사용하였습니다.

     

    1-2) 조건을 사용한 Update.

    index를 사용한 Update가 한 줄에 영향을 준다면 같은 조건을 가진모든 Line에 Update를 하려면 Where 조건을 사용할 수 있습니다.

    위의 구문은 틀린 구문입니다. 활성화가 되지 않습니다.

    실행된다면 문제는 해당 조건의 데이터를 Work Area의 전 필드로 변경이 되겠지요. 그래서 Where를 사용할 때 어떤 필드를 Update 할지 기술해주는 TRANSPORTING을 사용해야 오류가 나지 않습니다. 아래와 같이 사용해야 합니다.

     

    1-3) 해당 KEY 값으로 Update

    MODIFY TABLE 구문을 사용하며 KEY 필드를 지정하지 않았다면 수행되지 않고 넘어갑니다.

    1-4) SY-TABIX 사용의 주의할 점.

    아래와 같은 LOOP문이 있습니다. LT_STAND2의 MATKL 값을 LT_STAND1의 MATKL값으로 변경하려 하는 문장입니다.

    문제는 MODIFY 문에 INDEX를 SY-TABIX를 사용했습니다. 틀린 것은 아니죠 하지만 문제가 있습니다.

    SY-TABIX는 가장 최근에 수행된 READ, LOOP의 INDEX를 가지고 있습니다. 지금은 READ LT_STAND1의 INDEX를 가지고 있습니다. 여기서 LT_STAND2를 MODIFY 하는데 이 INDEX를 사용하면 안 되겠죠.

     

    1-1)에서 제가 LV_TABIX라는 로컬 변수를 선언해서 사용하는 것이 이런 것을 막기 위한 이유입니다. 이렇게 사용하는 것을 무의식적으로 버릇을 들이는 것이 좋습니다. 

    아래처럼 해당 테이블의 INDEX를 로컬 변수로 받아 사용하면 이런 문제는 없겠습니다. 

    2) DELETE

    DELETE는 MODIFY와 사용법이 비슷하므로 사용 가능 구문의 예로 보고 넘어가겠습니다.

    INDEX를 알 때 구문 : READ, LOOP 밑에서 찾은 INDEX로 데이터를 삭제합니다.

    조건을 사용한 구문 : 마치 LOOP를 돌며 지운 것처럼 해당 조건의 데이터를 모두 지워줍니다.

    KEY를 사용한 구문: 해당 Work Area의 KEY와 동일한 데이터를 지워 줍니다. 

     

     

    여기까지 해서 Internal table에서 사용 가능한 구문들을 살펴보았습니다. 그럼 다음 포스팅에서 뵙죠.

     

    긴 글 읽어주셔서 감사합니다.

    728x90
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기