Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

꺄르륵

[Oracle SQL Developer] 기초 II - DATA TYPE 본문

프로그래밍/DB

[Oracle SQL Developer] 기초 II - DATA TYPE

Teddy. 2019. 10. 4. 12:44

1. 데이터 타입 



 - 문자열, 숫자, 날짜, 기타로 분류 (ORACLE은 BOOLEAN 타입이 없다.)
 - ORACLE도 AUTOCASTING을 지원한다.
 - VARCHAR, NUMBER, DATE, OTHER

 1) 문자열 자료
  - 문자자료는 ' ' 으로 묶어서 처리한다.
  - 오라클에서 하나의 문자를 표현하는 JAVA의 CHAR 같은 문자자료가 존재하지 않음. 
  - 모두 문자열로 취급된다.
  - 사용되는 타입 : CHAR, VARCHAR, VARCHAR2, LONG, CLOB, NVARCHAR2, NCLOB 타입이 존재한다.
  - 앞에 N이붙은 타입은 NATIONAL의 약자로 국제 표준 문자코드를 이용한다. 유니코드 형식으로 저장된다. UTF-8 또는 UTF-16
  
  *1. CHAR(n)
    - 고정 길이 문자열을 처리한다.
    - 문자열 자료를 왼쪽에서 오른쪽 순서로 저장하고 남는 기억공간은 공백이 PADDING(추가되어 들어감) 된다.
    - 해당 기억장소보다 긴 문자열 자료를 입력하면 ERROR 발생.
    - 2000byte까지 사용가능
    - 한글 한 글자는 3byte 소요
    
    * 사용형식
    컬럼명 CHAR(n [CHAR|BYTE])
     - 'CHAR|BYTE'가 생략되어 있다면 기본값인 BYTE로 처리
     - CHAR이 사용되더라도 2000byte를 초과할 수 없음.
     - CHAR이 사용되는 경우는 기본키를 설정할때 주로 사용된다. 고정길이로 사용한다.

     - 단점은 사용되지 않는 byte수는 쓸모없는 저장을 하게 된다. 

     예시)
     
     CREATE TABLE TEMP01 (
     
     COL1 CHAR(10),
     COL2 CHAR(10 CHAR),
     COL3 CHAR(5 CHAR)
              
     );
     
     INSERT INTO TEMP01 (COL1, COL2, COL3) VALUES ('ABHIJ','열글자려고쓰는','다섯다');
     INSERT INTO TEMP01 (COL1, COL2, COL3) VALUES ('일포스',' 열 글 자 려쓰는','다 섯 다');
     
     SELECT * FROM TEMP01;
     
     -- LENGTH
     -- 고정길이가 있는 경우 나머지 byte는 영문자 기준으로 1byte씩 처리되어 작성된 길이 + 나머지길이가 더해져서 계산된다.
     -- 공백을 포함하여 모든 자리가 채워진 경우는 공백(1byte) + 입력한 문자의 byte가 계산된다.
     SELECT LENGTHB (COL1),LENGTHB (COL2),LENGTHB (COL3) FROM TEMP01;
     
     
   EX)
     COL1 CHAR(15) <= '홍길동' : '홍길동      ' 으로 저장된다.
     IF('홍길동'=COL1) -> 원래는 FALSE 였지만 자동으로 TRIM이 적용되어 TRUE로 인식됨.
  

 

     
  *2. VARCHAR2(n)
    - 가변길이 문자열을 처리 VAR = VARIABLE의 약어 
    - 글자수를 고정하지않고 사용자가 입력한 만큼 저장된다.
    - 정의된 크기의 공간에서 문자열 자료를 왼쪽에서 오른쪽 순서로 저장하고 남는 기억공간은 공백은 처리하지 않는다.
    - 최대 4000byte까지 저장된다. ( 한글은 1333.333333 자리까지 )

    
    *사용형식
     
    컬럼명 VARCHAR2 (n [byte|char]) 
    
    예시)
    
    CREATE TABLE TEMP02(
    
    COL1 VARCHAR2 (4000),
    COL2 VARCHAR2 (4000 CHAR)
     
    );
    
    INSERT INTO TEMP02(COL1,COL2) VALUES ('무궁화','          우리나라 꽃 입니다.           ');
    INSERT INTO TEMP02(COL1,COL2) VALUES ('12345678','TOM');
    
    SELECT * FROM TEMP02;
    
    -- 빈공간이 발생하지않고 입력받은 데이터만큼을 저장한다.
    -- AS 다음에 "NAME" 컬럼의 별칭을 바꿔준다.
    SELECT LENGTHB (COL1) AS "컬럼크기(BYTE)",
           LENGTHB (COL2) AS "컬럼크기(CHAR)",
           LENGTH (COL1) AS "컬럼크기(CHAR)",
           LENGTH (COL2) AS "컬럼크기(CHAR)"
           FROM TEMP02;
    
    
     
     
  *3. VARCHAR(n)
    - VARCHAR2와 동일한 방법으로 자료를 처리한다.
    - VARCHAR2를 사용할 것을 권고(Company.Oracle)
     
     
  *4. LONG(n)     
    - 가변길이 문자열 처리
    - 최대 2GB까지 처리한다.
    - 크기를 지정하지 않는다.
    - 나머지 사항은 VARCHAR2와 동일하다.
    
    - 제약사항 
     . ★ 한 테이블에 한 컬럼에서만 사용가능
     . SELECT문의 SELECT절, UPDATE문의 SET절, INSERT문의 VALUES절에서만 사용 가능하다.
     . CLOB 타입으로 대체
     
   * 사용형식
   
   컬럼명 LONG

CREATE TABLE TEMP03 (
    COL1 LONG, 
    
    COL3 VARCHAR2(100)
); 
     
INSERT INTO TEMP03 VALUES ('대 한 민 국','           대한민국         ');

SELECT * FROM TEMP03;