[15] ABAP INITIAL & NULL
ABAP에서는 모든 필드가 각자의 INITIAL VALUE를 가진다.
DATA 선언 시, 테이블 생성 시 모든 필드는 초기값(Initail Value)으로 저장된다!
Type C의 경우 공백(space, ' ' ) 으로, Type I의 경우 0 으로 저장되며
이는 Null과는 다르다
각 TYPE 별로 Initial Value 는 다음과 같다
Type | Init Value |
I, F , P, N | 0 |
C | ' ' (space) |
D | 00000000 |
T | 000000 |
Null과 Inital Value는 다음과 같은 차이점이 있다
Null | Initial Value |
어떠한 값도 갖지 않음 ! > 메모리 공간 차지 X | 값을 가짐 > 메모리 공간을 차지 |
0, '', space와는 다름 | 0, '' , Space, 공백 |
IS NULL, IS NOT NULL | IS INITIAL, IS NOT INITIAL |
값이 존재하지 않을 때, 초기값을 가지게 한다는 의미 |
ABAP에서는 기본적으로 Null 이라는 데이터는 존재하지 않는다!
이미 데이터가 존재하는 Table 에 필드를 추가할 때 intial 을 체크하지 않으면 null 값이 들어갈거라 예상했지만,
inital 필드를 설정하든 설정하지 않든 그냥 initial 값으로 저장되었따!
그래서 빈 값인 데이터를 찾으려면 SQL 문에 IS INITAL 구문을 써주어야 한다!
+ 추가)
JOIN 시점에 JOIN된 데이터가 없는 경우 ==> Null
ITAB 에 담기면 ==> INITAL
SFLIGHT 구조의 인터널테이블 LT_SFLGIHT에 CARRID = 'XX' 값을 저장하고
SCARR와 LEFT JOIN을 해주었다!
이 때 , B(인터널 테이블)의 CARRID 값이 INITIAL이면 'INIT'으로 대체하기로 했음
LT_CASE의 CARRID 필드에 'INI'T 글자가 들어가 있을 줄 알았지만, 아무 값도 존재하지 않았음 : CARRID는 NULL값
LT_CASE에 대해 CARRID 값이 NULL 인 데이터, INITIAL인 데이터를 SELECT 해보았다
LV_INIT : 데이터 18건
LV_NULL: 데이터 0건
SCARR와 LT_SFLGIHT를 JOIN 할 때, CASE 문의 IS INITIAL 을 IS NULL로 변경해보니
CARRID 필드에 'INIT'이 담긴 것을 확인 할 수 있었다!
오 예!!!
