2014년 7월 29일 화요일

Number Data Type에 관해[오라클개발자교육/오라클/ORACLE강좌/오라클교육잘하는곳/오라클교육추천/ORACLE실무교육/ORACLE/ORACLE교육/ORACLE학원/오라클실무교육]

======================== 
Number Data Type 
======================== 

1. 고정숫자와 부동 소수점 숫자를 저장한다. 

2. Oracle을 작동하는 서로 다른 시스템간에 38자 까지 정밀도를 유지하며 호환가능 

3. 최대 38자리의 유효숫자를 가지는 양수/음수,0 등이 저장된다. 

4. Column_name Number;Column_name Number(precision, scale)등의 형식으로 선언한다. 
- Scale을 지정하지 않으면 0 
- precision에 ‘*’를 표시하면 38 
- 숫자필드를 지정할 때 정밀도와 Scale을 지정하는것이 좋음 
- 7,456,123.89의 숫자가 있을 때 number로 선언하면 7456123.89로 저장 
- 7,456,123.89의 숫자가 있을 때 number(*,1)로 선언하면 7456123.9로 저장 
- 7,456,123.89의 숫자가 있을 때 number(9)로 선언하면 7456124로 저장 
- 7,456,123.89의 숫자가 있을 때 number(9,2)로 선언하면 7456123.89로 저장 
- 7,456,123.89의 숫자가 있을 때 number(6)로 선언하면 오류 

5. Number형의 Column길이 계산방법 
- Oracle은 numeric data를 가변 길이 포맷으로 저장한다. 각 값은 scientific notation으로 
저장된다.(1 byte used to store exponent and up to 20 bytes to store mantissa) Oracle은 
앞뒤의 0을 저장하지 않는다. 
-  즉 1 Byte는 지수를 저장하며, 최대 20 Byte가 가수를 저장하는데 사용된다.(정밀도는  
  최대 38) 또한 선행하는 0이나,후행하는 0은 저장하지 않는다. 예를들면 숫자 412는 
  4.12 * 10^2과 유사한 형식으로 저장된다. 

  즉 1 Byte가 지수2를 저장하는데 사용되며, 2 Byte가 가수 (4,1,2)를 저장하는데 사용 
  된다. 

  이를 이용하여 Number(p)에 대한 Column의 Byte계산이 가능하다. 
  1 Byte(지수) + floor(p/2) + 1 Byte(가수) + 1 Byte(음수) 

6. 정수부분과 소수부분을 구분하는 소수점문자(.)를 변경할려면 
  NLS_NUMERIC_CHARACTERS Parameter를 변경해야 한다. 

7.특히 주의할 사항은 소수점 이하는 반올림되어 저장된다는 사실을 감안하여 수치 연산이 많은 
경우 이를 고려하여 소숫점이하 크기를 결정하여야 한다. 

8.오라클에서는 원래의 데이타를 다른 타입의 데이타로 바꾸기위해 아래와 같은 여러가지 함수를 
제공한다. TO_NUMBER(), TO_CHAR(), TO_DATE(), HEXTORAW(), RAWTOHEX(), 
  ROWIDTOCHAR(), CHARTOROWID()을 이용하여 명시적으로 데이타 타입을 변경을 할 수 있을 뿐 
아니라 값 지정(assignment)시 오라클은 자동적으로 변환 작업을 수행하고, 문장(expression) 
내에서도 자동적으로 연산을 수행하기 위해 타입 변환을 수행한다.  

9.숫자 타입과 문자 타입의 값과 비교되면 상대 타입을 숫자 타입으로 바꾸어 비교된다. 
예를 들어 NUM1이 NUMBER 타입이고 인덱스가 생성되어 있을때 아래의 쿼리문을 수행하게 되면 
    SELECT * FROM TABLE1 WHERE NUM1 = '123';  일 경우 
내부적으로 위의 문장은 문자 타입의 변환이 발생함으로 위의 문장은 아래와 같이 변동되어 처리 
된다. 
  SELECT  * FROM TABLE1 WHERE NUM1 = TO_NUMBER('123'); 
  로 변동 되어 처리 되므로 인덱스를 사용하게 된다. 

10.NUMBER 타입으로 지정된 컬럼을 LIKE 'char%'로 비교하면 인덱스를 사용하지 않으므로 주의 
하여야 한다. 

    SELECT * FROM TABLE1 WHERE NUM1 LIKE '1%'; 
  
  을 수행하게 되면 일단 숫자 타입을 기준으로 '1%'을 바꾸려고 하지만 LIKE문으로 인해 숫자 
타입으로 변경할 수 가없다. 따라서 NUM1이 문자 타입으로 변경된다. 
  즉, 내부적으로 

    SELECT * FROM TABLE1 WHERE TO_CHAR(NUM1) LIKE '1%'; 

  로 변형이 일어나 수행하게 되므로서 수행 속도 향상에 주요한 인자가 되는 인덱스를 사용할 
수 없게 된다. 따라서 가능한한 인덱스를 생성할 컬럼은 문자 타입이 효과적이다. 
  


평일주간[100%환급과정]
(8/04)C#4.0,WinForm,ADO.NET
(8/04)자바기초JDBC,Servlet/JSP까지
(8/04)Spring,MyBatis,Hibernate실무과정
(8/11)PL/SQL,ORACLE HINT,TUNING
(8/11)SQL기초에서 Schema Object까지
(8/11)안드로이드개발자과정
(8/11)채용예정교육
평일야간[개인80%환급]
(8/04)웹퍼블리싱 마스터
(8/05)JSP,jQUERY,Spring,MyBatis
(8/06)Spring3.X, MyBatis, Hibernate
(8/08)C#,Network,ADO.NET,ASP.NET
(8/11)SQL기초에서실무까지
(8/11)안드로이드개발자과정
(8/28)자바JSP,jQuery,Spring,MyBatis
주말주간[개인80%환급]
(8/02)Spring3.X, MyBatis, Hibernate
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/09)SQL기초에서실무까지
(8/09)안드로이드개발자과정
(8/09)자바JSP,Ajax,jQuery,Spring,MyBatis
(8/23)JAVA,Network&WEB&Framework
주말야간[개인80%환급](18:30~22:20)
(8/02)JAVA,Network&WEB&Framework

댓글 없음:

댓글 쓰기