안녕하세요.. 워낙 초급입문이라 또 이런 기본적인 질문을 드립니다.
SELECT SINGLE *
FROM ZTABLE
WHERE NAME = SY-UNAME.
현재 상위와 같은 테이블과 필드가 있습니다. 권한체크를 위함이며,
NAME 필드와 로그인 데이터와 체크하는 방법입니다.
현재까지는 NAME 필드에 한명의 사용자만 존재하여, 상위와 같은 쿼리로 되었는데,
NAME 필드에 구분자를 사용하며 다수의 사용자가 등록될 경우
어떻게 검증처리를 해야하는지 좀.. 막막합니다.
SPLIT 을 사용하여 변수에 담아 어찌하면 될것 같은데요..
워낙 ABAP 쪽은 초보이다 보니.. 이런 질문까지 드립니다.
댓글 3
-
아밥 잭
2010.09.07 00:31
-
초보아밥퍼
2010.09.07 00:49
간단히 보면 ZTABLE 테이블에 구분자를 넣으시면 되겠지만 이것이 안된다면
아밥잭님의 예제대로 ',' 를 구분자로 하여 USER 가 들어간다면
데이터 'USER,USER1,USER2,AUSER3'
CONCATENATE '%' SY-UNAME '%' INTO LV_USER
SELECT SINGLE
FROM ZTABLE
WHERE NAME LIKE LV_USER.
으로 체크하셔도 될듯 보이네요. ^^;
사용자 룰이 이럴경우가 아닌때 말이죠( A, AA, AAA )
-
맑은하늘
2010.09.07 01:34
어떤 아이디가 들어올지 모른다면 전체 아이디로 검색해서
해당 아이디별로 권한을 점검하시는 게 맞지 않을까 생각해서
아래처럼 로직을 구현하면 어떨까 생각해 봤네요. ^^
로그온 사용자가 그리 많지 않기 때문에 전체로 검색해도
큰 무리는 없을 것 같네요. ^^
DATA LT_ZTABLE TYPE TABLE OF ZTABLE
FIELD-SYMBOLS <LFS_ZTABLE> TYPE ZTABLE.
SELECT * INTO TABLE LT_ZTABLE
FROM ZTABLE
WHERE NAME IN
(SELECT BNAME FROM USR01).
LOOP AT LT_ZTABLE ASSIGNING <LFS_ZTABLE>.
"" 아이디별 권한 점검
CASE <LFS_ZTABLE>-NAME.
WHEN '아이디1'.
WHEN '아이디2'.
...
WHEN '아이디n'.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
안녕하세요, 아래의 소스를 참조하세요. 단, 구분자는 넣을 때 확정해야겠지요.
여기서는 ',' 이걸 사용했습니다. 원하시는게 맞는지 모르겠네요.
예제).
DATA: c TYPE string.
DATA: d(10) TYPE c.
DATA: BEGIN OF it_name OCCURS 0,
name(10) TYPE c,
END OF it_name.
c = 'AB,AC,AD,AE,AF,AG'.
DO.
FIND ',' IN c.
IF sy-subrc <> 0.
EXIT.
ELSE.
SPLIT c AT ',' INTO d c.
it_name = d.
APPEND it_name.
CLEAR it_name.
ENDIF.
ENDDO.
LOOP AT it_name.
WRITE: / it_name-name.
ENDLOOP.
결과:
AB
AC
AD
AE
AF
수고하세요.