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에 비해 최대 크기가 큰데, 이들을 정리하면 다음과 같다.
데이터 타입 | 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 |