0v0__DEV

[15] ABAP INITIAL & NULL 본문

SAP BASIC

[15] ABAP INITIAL & NULL

0v0_삐약 2025. 2. 27. 09:29
728x90

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'이 담긴 것을 확인 할 수 있었다! 

 

오 예!!!

 

728x90