더북(TheBook)

Knowhow | SQL과 PL/SQL 데이터 타입별 길이

이 장의 앞 부분에서 SQL에서 사용할 수 있는 데이터 타입은 PL/SQL에서도 사용할 수 있다고 언급한 적이 있다. 그런데 같은 데이터 타입이라도 SQL과 PL/SQL에서 사용할 수 있는 크기는 다르다. 결론부터 말하면 PL/SQL에서 훨씬 더 큰 크기로 사용할 수 있다. 예를 들어, VARCHAR2 타입은 SQL에서는 최대 크기가 4000 byte였다. 하지만 PL/SQL에서는 VARCHAR2 타입을 32KB(32, 767 byte)까지 사용할 수 있다.

예제를 통해 확인해 보자. 먼저 VARCHAR2 컬럼을 가진 테이블을 4000 byte 이상 길이로 생성해보자.

입력

    CREATE TABLE ch08_varchar2 (
           VAR1 VARCHAR2(5000));

결과

    SQL 오류: ORA-00910: 데이터형에 지정된 길이가 너무 깁니다.

예상대로 오류가 발생했다. 4001 byte로 생성해도 오류가 나므로 4000 byte로 생성해 보자.

입력

    CREATE TABLE ch08_varchar2 (
           VAR1 VARCHAR2(4000));

결과

    table CH08_VARCHAR2이(가) 생성되었습니다.

이제 ch08_varchar2 테이블의 var1 컬럼에 정확히 4000 byte 길이의 데이터를 넣겠다(4000 글자 짜리 문자열이 너무 길어 아래에서는 간단히 INSERT문만 표기했고 이 장의 소스코드에 전체 코드가 나와 있다).

입력

    INSERT INTO ch08_varchar2 (VAR1)
    VALUES ('...')
    ;

결과

    1개 행 이(가) 삽입되었습니다.

입력

    COMMIT;

결과

    커밋되었습니다.

이제 PL/SQL 익명 블록을 만들어 VARCHAR2 타입의 최대 길이를 살펴 보자.

입력

    DECLARE
       vs_sql_varchar2   VARCHAR2(4000);
       vs_plsql_varchar2 VARCHAR2(32767);
    BEGIN

      -- ch08_varchar2 테이블의 값을 변수에 담는다.
      SELECT VAR1
        INTO vs_sql_varchar2
        FROM ch08_varchar2;

      -- PL/SQL 변수에 4000 BYTE 이상 크기의 값을 넣는다.
      vs_plsql_varchar2 := vs_sql_varchar2 || ' - ' || vs_sql_varchar2 || ' - ' || vs_sql_varchar2;

      -- 각 변수 크기를 출력한다.
      DBMS_OUTPUT.PUT_LINE('SQL VARCHAR2 길이 : ' || LENGTHB(vs_sql_varchar2));
      DBMS_OUTPUT.PUT_LINE('PL/SQL VARCHAR2 길이 : ' || LENGTHB(vs_plsql_varchar2));
    END;

결과

    SQL VARCHAR2 길이 : 4000
    PL/SQL VARCHAR2 길이 : 12006

위 익명 블록을 보면 알겠지만 PL/SQL에서는 VARCHAR2 타입의 변수를 선언해 4000 byte 이상의 값을 집어 넣을 수 있다. PL/SQL에서는 VARCHAR2 외의 다른 타입도 SQL에 비해 최대 크기가 큰데, 이들을 정리하면 다음과 같다.

표 8-4 PL/SQL과 SQL의 데이터 타입 최대 크기
데이터 타입 PL/SQL 최대 크기 SQL 최대 크기
CHAR 32,767 byte 2,000 byte
NCHAR 32,767 byte 2,000 byte
RAW 32,767 byte 2,000 byte
VARCHAR2 32,767 byte 4,000 byte
NVARCHAR2 32,767 byte 4,000 byte
LONG 32,767 byte 2 GB - 1
LONG RAW 32,767 byte 2 GB
BLOB 128 TB 4 GB -1
CLOB 128 TB 4 GB -1
NCLOB 128 TB 4 GB -1
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.