오라클 함수중 vsize()랑 length랑 lengthb랑 차이점을 알려고 하는데요vsize는 정체를 모르겠습니다. 0 3 3,787

by 홍시 [2014.12.15 13:23:22]


안녕하세요 오라클 스터디 중입니다. 

SELECT VSIZE('SYSTIMESTAMP'),LENGTH('SYSTIMESTAMP'),LENGTHB('SYSTIMESTAMP') FROM DUAL
UNION ALL
SELECT VSIZE(SYSTIMESTAMP),LENGTH(SYSTIMESTAMP),LENGTHB(SYSTIMESTAMP) FROM DUAL
UNION ALL
SELECT VSIZE(12345678),LENGTH(12345678),LENGTHB(12345678) FROM DUAL
UNION ALL
SELECT VSIZE('12345678'),LENGTH('12345678'),LENGTHB('12345678') FROM DUAL
UNION ALL
SELECT VSIZE(SYSDATE),LENGTH(SYSDATE),LENGTHB(SYSDATE) FROM DUAL

아래의 쿼리로 결과를 날려보면 systimestamp란이 결과가 13이 나옵니다. 대체 왜 13인가요?

글자수는 12자리이고 표현하는데 12바이트이면 될꺼 같은데 말입니다. 예약어라서 하나더 붙었다면 sysdate도 한자 더붙어서 8자가 나와야겠지만 7자로 정상적으로 나옵니다. 

VSIZE에 찾아보면 이렇게 나오는데 제가 뭘 놓치고 있는 걸까요?

VSIZE(expr) : expr의 바이트 수를 리턴 한다.   EXPR자체의 바이트수인가요? SYSTIMESTAMP 이건 그럼 12가 나와야 하는거 아닌가요? 아시는분 답변좀 부탁드립니다.

 

by DJ [2014.12.15 13:49:17]

length나 lengthb 는 character type 의 길이를 return하고요.

vsize 는 date type, number type의 길이도 return 하죠.

VSIZE('SYSTIMESTAMP') 는 character 표현으로 12자리 이고 VSIZE(SYSTIMESTAMP) 는 timestamp data type으로 해당 DB에서는 13자리 잡혔다는 뜻이죠.


by 아발란체 [2014.12.15 14:04:52]

length는 알고 계실 것 같고,

lengthb는 오라클 설치 환경에 따라 길이가 달라 질 수 있습니다.

다국어 처리 관련, '한' 이라고 글자를 입력하고 lengthb 했을 때 어디는 길이가 2로 나오지만, 또 어디는 3으로 나올 수 있습니다. 영어가 아닌 한글이나 일본어 등 다국어 처리를 위해 언어셋을 UTF-8, UTF-16, EUC-KR 등 무엇으로 저장 구조를 만들었냐에 따라 길이 차이가 나며 그 차이는 length가 아닌 lengthb로 확인 할 수 있습니다.


by 김치찌게 [2014.12.16 11:19:10]

VSIZE('SYSTIMESTAMP'),VSIZE(SYSTIMESTAMP)

-- 앞에꺼는 character 형 뒤에는 systimestamp가 return 하는 타입형

SYSTIMESTAMP

returns the system date, including fractional seconds and time zone, of the system on which the database resides. The return type is TIMESTAMP WITH TIME ZONE.

 TIMESTAMP [(fractional_seconds)] WITH TIME ZONE

The default is 6. The default format is determined explicitly by the NLS_DATE_FORMAT parameter or implicitly by the NLS_TERRITORY parameter.
 The size is fixed at 13 bytes.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입