Pro*C에서 varchar type vs char type Host 변수차이
EXEC SQL FETCH CURSOR_NAME INTO :HOST_VAR
1.host var이 varchar 타입인경우:PROC가 fetch into시 into다음의 host var에
자동으로 '\0'을 넣어주는가. NO
(전역변수인경우에만 OK-이유:전역변수는 초기화되어있으므로.)
지역(자동)변수인경우는 VARCHAR v_name[MAX_CNT][20]={0}; 또는 memset을 이용하여
반드시 초기화필요.
따라서 FETCH를 loop으로 돌릴경우 memset을 사용하여 초기화시킬필요가 있다.
다시정리하면
varchar type경우 fetch시
.len변수 자동으로세팅
.arr 끝에 null char('\0')가 자동으로 세팅되지 않기때문에
loop로 돌리기전에 매번 memset으로 초기화필요.
일단 초기화된 varchar .arr변수는 차후 SQL에서 필드비교값으로 쓰일때 문자열뒤에 쓸데없는
스페이스가 없으므로 편리한장점이 있다.
varchar 타입의 변수라도 메모리상에 절약되는것은 아니며(오히려 더 많이 차지할수도 있다.)
********************************************************************************************
***중요: 타입이 varchar가 아닌 일반 char type경우는 신경쓸필요가없어서 편하다.
왜냐면 char a[20]이라고 하면 19[idx:0~18]짜리까지 복사해주고 자동으로
null terminated character ('\0')을 끝에[idx 19] 추가해주기때문이다.
fetch를 loop으로 돌아도 마찬가지이다.굳이 char타입의 호스트변수 초기화가 필요없다.
자동으로 끝에(마지막 인덱스에) '\0'을 붙여준다.
대신 중간에 스페이스문자가 많이들어간다.
나중에 SQL구문에서 비교할경우를 대비하여 문자열변수뒤에 붙은 스페이스들을 제거해주는것이 필요하다