database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 38283 게시물 읽기
No. 38283
약간좀 이상한 결과
작성자
김흥수(protokhs)
작성일
2010-12-31 09:35
조회수
3,142

우연히 알게 되어 올립니다.

 

C 나 C++ 등에서

숫자 상수 뒤에 f , d,l 등을 붙여서 숫자의 단정도 또는 배정도를 표기합니다.

그런데 f,d,l 같은 것 중에서 오라클 SQL에서는 f,d는 사용할 수 있더군요

select 1.2f from dual;

select 1.2d from dual;

 

이렇게 쓸 수 있다는 것입니다.

그런데 l은 사용할 수 없더군요...

select 12l from dual;

하면 에러가 안나지만

select 12l as a from dual;

하면 에러가 납니다.

 

그런데 이상하지 않나요?

select 12l from dual;

은 에러가 안날까요?

 

심지어

select 12갑 from dual ;

도 에러가 안납니다.

설마 오라클이 '갑' 이 담배를 세는 단위임을 인식해서? ㅋㅋ

알고 보니

select 12갑 from dual;

에서 '갑' 을 오라클은 alias로 파싱합니다.

그런데 이상한 것은 일반적인 파서들은 토큰을 인식할 때 분리문자(공백,탭,엔터값)으로 분리되지 않거나 특수문자(연산자를 이루는)를 만나기 전에는 해당 토큰이 끝나지 않은것으로 보아

에러를 리턴해야 정상입니다.

그런데 오라클은 숫자상수 뒤에 바로 alias를 써도 인정이 되네요...

물론

select '12'갑 from dual;

도 에러가 안납니다.

좀 재미있는 현상이네요

이 글에 대한 댓글이 총 2건 있습니다.

select 1.2f from dual;

select 1.2d from dual;

의  f 와 d 는 Float 과 Doulble를 나타내지만

"l", "갑" 등은 컬럼명으로 인식이 되네요...

따라서 12l as a가 오류가 나는것은 이미 "l" 이라는 컬럼명이 있는데

거기에 다시 "a" 라는 컬럼명을 또 부여하는 결과가 되어버려서 오류가 납니다.

"갑" 도 마찬가지구요.

12l 은 12 as l 과 같이 인식이 되고, 12갑 또한 12 as 갑 으로 인식이 되네요.

知音(sunnylee72)님이 2010-12-31 10:22에 작성한 댓글입니다.
이 댓글은 2010-12-31 11:22에 마지막으로 수정되었습니다.

특이하긴 하네요~ ^^

 

하지만, 코딩시 항상 중요한 것은 명시적인 선언이겠지요~ ^^;

 

암비님이 2011-01-03 09:20에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
38286NUMBER형데이터 조회 [2]
이종성
2011-01-03
3649
38285이런 경우에는 어떻게 처리하는게 빠를까요? [3]
조형래
2011-01-03
3006
38284START WITH... CONNECT BY 로 연결시킨 구문에서 특정값을 뽑아오고 싶습니다. [1]
전현욱
2010-12-31
4462
38283약간좀 이상한 결과 [2]
김흥수
2010-12-31
3142
38282구분자가 있는 한필드의 결과를 세로로 [4]
짜집기
2010-12-30
5555
38281analyze 후 느려짐 [6]
궁금이
2010-12-30
4127
38280쿼리 중복건 내 집계 [2]
쿼리OTL
2010-12-30
3784
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다