본문 바로가기

오라클

오라클 데이터 타입과 정확히 작성해야 하는 이유

목차

    Oracle에서 데이터 타입은 데이터베이스에서 저장되는 값을 분류하는 데 사용됩니다.

    테이블을 설계할 때 부터 데이터 타입을 정확히 지정해 놓으면 나중에 오류와 실수를 줄일 수 있습니다.

    완벽한 AI가 DB를 설계하고 프로그래밍 한다면 VARCHAR만 가지고도 가능할지 모르겠지만 사람은 프로그램 작성이나 쿼리작업시 실수 할 수있기 때문에 처음부터 신중히 정하는 것이 좋습니다.

    이 외에도 데이터타입을 정확히 작성해야하는 이유는 많이 있습니다.

     

    오라클 데이터 길이가 맞지 않는 오류
    오라클 데이터 길이가 맞지 않는 오류

     

     


    1. DB에서 데이터 타입을 정확히 작성해야 하는 이유

    1-1. 저장공간을 절약 및 데이터 손실

    고정 길이 문자열 (CHAR)은 입력된 값보다 길이가 크면 공백으로 채워지므로 낭비가 발생할 수 있습니다. 반대로 입력된 값보다 길이가 작으면 입력된 값이 잘릴 수 있습니다. 반면 가변 길이 문자열 (VARCHAR)는 입력된 값만큼만 저장공간을 사용하므로 효율적입니다.

     

    1-2. 연산의 속도와 정확도를 향상

    숫자형 데이터는 숫자형 타입으로 지정하는 것이 문자형 타입으로 지정하는 것보다 연산이 빠르고 오차가 적습니다. 또한 날짜형 데이터는 DATE 타입으로 지정하는 것이 일반 문자형 타입으로 지정하는 것보다 날짜 관련 함수를 사용할 수 있고 형식 변환에 따른 오류를 줄일 수 있습니다.

     

    1-3. 데이터 무결성 문제

    적절한 데이터 타입을 사용하지 않으면, 예상치 못한 데이터가 데이터베이스에 저장될 수 있습니다. 이는 데이터 무결성을 손상시킬 수 있습니다. 예를 들어 날짜 데이터를 문자열 형식으로 저장하면, 유효하지 않은 날짜 값이 입력될 수 있습니다.

     

    1-4. 타입 변환 오류

    데이터 타입이 정확하지 않으면, 데이터를 다른 데이터 타입으로 변환하는 과정에서 오류가 발생할 수 있습니다. 문자열 데이터 타입의 숫자를 정수로 변환하려고 할 때, 변환 오류가 발생할 수 있습니다.

     

    1-5. 쿼리 오류

    데이터 타입이 정확하지 않으면, 쿼리 작성 시 문제가 발생할 수 있습니다. 적절하지 않은 데이터 타입으로 인해 쿼리의 조건절에서 오류가 발생하거나, 기대한 결과를 얻지 못할 수 있습니다.

     

    1-6. 데이터의 유효성과 일관성

    주민등록번호나 전화번호와 같은 코드화된 컬럼은 숫자형 타입으로 지정하면 인덱스를 사용할 수 없게 되고 비교 연산자나 정렬 기준에 문제가 발생할 수 있습니다. 반면 문자형 타입으로 지정하면 이러한 문제를 방지할 수 있습니다.

     

    1-7. 호환성

    표준 데이터 타입을 사용하면, 다양한 데이터베이스 시스템 간의 호환성을 보장할 수 있습니다. 이는 데이터 마이그레이션 또는 다양한 데이터베이스 시스템을 사용하는 애플리케이션 개발에 유용합니다.

     

     

     


    2. 오라클 데이터 타입의 종류

     

    다양한 데이터 타입을 사용하면 효율적인 데이터 저장 및 검색이 가능하고, 올바른 데이터 유형에 따라 작업을 수행할 수 있습니다. Oracle에서 사용할 수 있는 주요 데이터 타입들은 다음과 같습니다.

     

    2-1. 문자열 데이터 타입

    • CHAR: 고정 길이 문자열을 저장합니다. 공간을 낭비하지 않으려면 문자열의 길이를 미리 알고 있어야 합니다. 
    • VARCHAR2: 가변 길이 문자열을 저장합니다. 문자열의 길이가 일정하지 않을 때 사용하면 공간을 절약할 수 있습니다.
    • NCHAR: 고정 길이 유니코드 문자열로, 최대 길이는 2000 바이트입니다.
    • NVARCHAR2: 가변 길이 유니코드 문자열로, 최대 길이는 4000 바이트입니다.
    • CLOB: 대용량 문자 데이터로, 최대 길이는 128 테라바이트까지 저장할 수 있습니다.
    • NCLOB: 대용량 유니코드 문자 데이터로, 최대 길이는 128 테라바이트까지 저장할 수 있습니다.
    CREATE TABLE employees (id NUMBER,first_name VARCHAR2(50), last_name VARCHAR2(50),bio CLOB );

     

    2-2. 숫자 데이터 타입

    • NUMBER(p, s): 숫자 데이터를 저장합니다. 'p'는 정밀도, 's'는 스케일을 나타냅니다. 
    • FLOAT: 부동 소수점 숫자를 저장합니다. 실수를 저장할 때 사용됩니다. 
    • BINARY_FLOAT: 32비트 단정밀도 부동 소수점 숫자 데이터 타입입니다.
    • BINARY_DOUBLE: 64비트 배정밀도 부동 소수점 숫자 데이터 타입입니다.
    CREATE TABLE products (id NUMBER,price NUMBER(10, 2),weight FLOAT );

     

    2-3. 날짜 및 시간 데이터 타입

    • DATE: 날짜와 시간 정보를 저장하는 데이터 타입으로, 년, 월, 일, 시, 분, 초를 포함합니다.
    • TIMESTAMP: DATE와 유사하지만, 소수점 이하의 초까지 지원하는 데이터 타입입니다.
    • TIMESTAMP WITH TIME ZONE: TIMESTAMP와 유사하지만, 시간대 정보도 함께 저장하는 데이터 타입입니다.
    • TIMESTAMP WITH LOCAL TIME ZONE: TIMESTAMP WITH TIME ZONE과 유사하지만, 데이터베이스의 로컬 시간대를 사용하는 데이터 타입입니다.
    • INTERVAL YEAR TO MONTH: 두 날짜 간의 차이를 년과 월로 표현하는 데이터 타입입니다.
    • INTERVAL DAY TO SECOND: 두 날짜 간의 차이를 일, 시, 분, 초로 표현하는 데이터 타입입니다.
    CREATE TABLE orders 
    (id NUMBER, order_date DATE, shipped_timestamp TIMESTAMP, 
    delivery_interval INTERVAL DAY TO SECOND );

     

    2-4. RAW 및 LONG RAW 데이터 타입

    • RAW: 이진 데이터를 저장하는 가변 길이 데이터 타입으로, 최대 길이는 2000 바이트입니다.
    • LONG RAW: 이진 데이터를 저장하는 데이터 타입으로, 최대 길이는 2 기가바이트입니다.
    • BLOB: 대용량 이진 데이터를 저장하는 데이터 타입으로, 최대 길이는 128 테라바이트까지 저장할 수 있습니다.
    CREATE TABLE images (id NUMBER, image_data LONG RAW );

     

    2-5. BOOLEAN 데이터 타입

    • BOOLEAN: 참(TRUE) 또는 거짓(FALSE) 값을 저장하는 데 사용되는 데이터 타입입니다. Oracle에서는 BOOLEAN 데이터 타입이 PL/SQL 프로시저와 함수에서만 사용되며, 테이블의 열에 사용할 수 없습니다. 대신 CHAR(1) 또는 NUMBER(1)과 같은 데이터 타입을 사용하여 참/거짓 값을 표현할 수 있습니다.
    CREATE OR REPLACE PROCEDURE check_status 
    (input_id NUMBER, is_active OUT BOOLEAN ) AS BEGIN  
    -- 작업 수행 후 is_active 변수를 TRUE 또는 FALSE로 설정 END;

     

    2-6. ROWID 데이터 타입

    • ROWID: 데이터베이스 테이블의 각 행에 대한 고유 식별자로, 행 주소로 사용됩니다.
    • UROWID: ROWID와 유사하나, 표준의 Universal Row Identifier 형식을 따르며, 최대 4000 바이트까지 지원합니다.
    SELECT ROWID, id, first_name FROM employees;

     

     


    3. 오라클에서 지원하지 않는 데이터 타입

    오라클에서 지원하는 많은 데이터 타입을 알아봤습니다.

    하지만 오라클에서도 제공하지 않는 데이터 타입이 있습니다.

    오라클에서 제공하지 않는 데이터 타입도 있습니다. 예를 들어 ANSI 표준에서 정의한 데이터 타입 중에는 오라클에서 인식하지 못하는 것들이 있습니다. 예를 들어 BIT, BOOLEAN(PL/SQL, 함수에서만 사용), TIME 등은 오라클에서 사용할 수 없는 데이터 타입입니다. 또한 다른 데이터베이스 시스템에서 사용하는 데이터 타입 중에는 오라클과 호환되지 않는 것들이 있습니다. 예를 들어 MySQL의 ENUM이나 SET과 같은 데이터 타입은 오라클에서 지원하지 않습니다.