본문 바로가기

Language/ABAP

[ABAP] INITIAL VALUE

ABAP DICTIONARY에서 테이블을 조회하면 볼 수 있는 INITIAL VALUE

테이블의 필드 속성 중 하나인 INITIAL VALUE는 테이블을 생성할 때 체크 표시를 하면 NULL값이 아닌 초기값을 가지게 한다는 의미이다. 즉, NULL값을 허용하지 않는다는 뜻이다.

그렇다면 NULL과 INITIAL VALUE의 차이점은 무엇일까?

NULL (無) Initial Value (有)
값이 존재하지 않는 것으로 메모리 공간을 점유하지 않음
할당, 연산, 비교할 수 없는 대상
OPEN SQL에서 IS NULL, IS NOT NULL 사용 가능
0, ‘’, ‘ ‘, SPACE, 공백과 같은 값으로 표현할 수 없음
값이 존재하는 것으로 메모리 공간을 점유함
할당, 연산, 비교가 가능한 대상
IS INITIAL, IS NOT INITIAL 사용 가능
0, ‘’, ‘ ‘, SPACE, 공백과 같은 값으로 표현될 수 있음

 

INITIAL VALUE는 데이터 타입마다 초기값이 다 다르다.

타입 초기값
I 0
F 0
P 0
C ' ', SPACE
D '00000000'
N '0 ... 0'
T '000000'
X X'0 ... 0'

 

KEY값은 NULL값을 허용하지 않으므로 INITIAL VALUE를 체크하지 않아도 자동으로 포함된다. 

EASY ABAP책에 따르면 INITIAL VALUE의 중요한 점은 추가 필드생성할 때 INITIAL VALUE를 설정하는 것이 의미 있다는 것이다. 즉, 기존의 데이터들을 INITIAL VALUE로 저장할 것인지, NULL값으로 저장할 것인지 설정하는 것이다.

그래서 테스트해봤다.

이와 같이 테스트 테이블을 만들고

값을 이렇게 넣은 후

HOME 필드를 추가하고 난 후

기존 데이터는 건들지 않고 추가 데이터를 입력했다.

HOME 필드를 생성할 때 INITIAL VALUE를 체크하지 않고 활성화했기에 기존 데이터의 HOME 필드에는 NULL 값이 들어가 있어야 한다.

NULL값이 정상적으로 들어가 있는지 SELECT로 조회했다.

WHERE절 조건으로 HOME필드에 값이 있는 것만 조회했기에 정상적으로 HOME필드에 값이 있는 것만 조회되는 것을 확인할 수 있다.

 

이렇게 HOME필드에 NULL값이 있는 것으로 조회해 보니

아무것도 조회되는 데이터가 없다.

그래서 NULL값이 아닌 것만 다시 조회해 보니

테이블에 있는 모든 데이터가 조회되는 것을 확인할 수 있다.

여기에서 알 수 있는 것은 테이블을 생성할 때 INITIAL VALUE를 체크하지 않아도 항상 초기값이 들어가는 것을 알 수 있다. 

필드별로 초기값이 어떻게 들어가는지 확인하고 싶다면

UTILITIES -> DATABASE OBJECT -> DISPLAY로 들어가면

이렇게 필드에 대한 상세 정보를 알 수 있다.

이렇게 해서 SAP에는 NULL값이 없다는 것을 알게 되었다.

그렇다면 SAP에서 NULL 값을 사용하는 때는 과연 언제일까?

https://abaprocks.wordpress.com/2020/08/11/difference-between-null-and-initial/

 

SAP Difference Between Null and ” (Null and Initial)

This article was moved to new site SAP does not have a predefined type as ‘Null’. But SQL has null as a comparison operator in OpenSQL and CDS queries. You can use ‘is null’…

abaprocks.wordpress.com

 

이 글에 의하면 SAP에서 NULL값을 사용하는 것은 바로 JOIN을 사용할 때이다.

그래서 바로 테스트해 봤다.

WHERE절에 IS NULL을 사용해서 데이터 조회가 되는 것을 확인했다.

하지만, 데이터가 표기될 때 빈칸이 아닌 0000으로 표기되는 것을 알 수 있다.

ALV에서 동일하게 나올까?

같은 내용을 ALV로 띄워보니 아무것도 나오지 않았다.

즉 SAP에서는 NULL값을 사용할 때는 OUTER JOIN을 사용할 때만 가능하다.

하지만, 현장에서는 NULL이라는 키워드를 사용하지 않는다.