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가 나와야 하는거 아닌가요? 아시는분 답변좀 부탁드립니다.
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.