제43장 UTL_RAW

내용 목차

43.1. 개요
43.2. 함수
43.2.1. BIT_AND
43.2.2. BIT_COMPLEMENT
43.2.3. BIT_OR
43.2.4. BIT_XOR
43.2.5. CAST_FROM_BINARY_DOUBLE
43.2.6. CAST_FROM_BINARY_FLOAT
43.2.7. CAST_FROM_BINARY_INTEGER
43.2.8. CAST_FROM_NUMBER
43.2.9. CAST_TO_BINARY_DOUBLE
43.2.10. CAST_TO_BINARY_FLOAT
43.2.11. CAST_TO_BINARY_INTEGER
43.2.12. CAST_TO_NUMBER
43.2.13. CAST_TO_RAW
43.2.14. CAST_TO_VARCHAR2
43.2.15. COMPARE
43.2.16. CONCAT
43.2.17. COPIES
43.2.18. LENGTH
43.2.19. OVERLAY
43.2.20. REVERSE
43.2.21. SUBSTR
43.2.22. TRANSLATE
43.2.23. TRANSLITERATE
43.2.24. XRANGE

본 장에서는 UTL_RAW 패키지의 기본 개념과 패키지 내의 함수를 사용하는 방법을 설명한다.

43.1. 개요

UTL_RAW는 RAW 타입의 데이터와 관련된 여러 가지 함수를 제공하는 패키지이다.

SQL 문장 내에서 CHAR 또는 VARCHAR 타입의 데이터에 사용할 수 있는 함수는 RAW 타입의 데이터에는 사용할 수 없다. 또한, RAW 타입과 CHAR, VARCHAR 타입 간에는 데이터 변환을 할 수 없다.

이러한 문제를 해결하기 위해 UTL_RAW 내에 정의된 함수를 사용한다. 그러면 CHAR, VARCHAR 타입의 데이터에 사용할 수 있는 함수의 기능을 RAW 타입의 데이터에도 사용할 수 있다.

43.2. 함수

본 절에서는 UTL_RAW 패키지에서 제공하는 함수를 알파벳 순으로 설명한다.

43.2.1. BIT_AND

주어진 두 바이너리 데이터에 AND 연산을 수행하여 반환하는 함수이다. 이 두 데이터의 길이가 다르면, 짧은 쪽 데이터의 길이만큼 연산을 수행한 결과에 긴 쪽에 남아있는 부분의 데이터를 첨가한다. 따라서 반환되는 최종 결과 데이터는 긴 쪽의 데이터와 길이가 같다.

BIT_AND 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.BIT_AND 
    (
        data1       IN          RAW,
        data2       IN          RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data1피연산자이다.
    data2피연산자이다.
  • 반환값

    반환값설명
    RAWdata1과 data2의 AND 연산 결과를 반환한다.
    NULLdata1과 data2 중 하나라도 NULL인 경우에 반환한다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.BIT_AND('abc', '012'));
    END;
    /
    0010
    
    PSM completed
    SQL> 

43.2.2. BIT_COMPLEMENT

주어진 바이너리 데이터에 대한 1의 보수를 반환하는 함수이다.

BIT_COMPLEMENT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.BIT_COMPLEMENT
    (
        data       IN       RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data피연산자이다.
  • 반환값

    반환값설명
    RAWdata의 COMPLEMENT 연산 결과를 반환한다.
    NULLdata가 NULL인 경우에 반환한다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.BIT_COMPLEMENT('456'));
    END;
    /
    FBA9
    
    PSM completed
    SQL> 

43.2.3. BIT_OR

주어진 두 바이너리 데이터에 대한 OR 연산을 수행하여 반환하는 함수이다. 두 데이터의 길이가 다르면, 짧은 쪽 데이터의 길이만큼 연산을 수행한 결과에 긴 쪽의 남아있는 부분의 데이터를 첨가한다. 반환되는 최종 결과 데이터는 긴 쪽의 데이터와 길이가 같다.

BIT_OR 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.BIT_OR
    (
        data1       IN       RAW, 
        data2       IN       RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data1피연산자이다.
    data2피연산자이다.
  • 반환값

    반환값설명
    RAWdata1과 data2의 OR 연산 결과를 반환한다.
    NULLdata1과 data2 중 하나라도 NULL인 경우에 반환한다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.BIT_OR('123', '456'));
    END;
    /
    0577
    
    PSM completed
    SQL> 

43.2.4. BIT_XOR

주어진 두 바이너리 데이터에 대한 XOR 연산을 수행하여 반환하는 함수이다. 두 데이터의 길이가 다르면, 짧은 쪽 데이터의 길이만큼 연산을 수행한 결과에 긴 쪽의 남아있는 부분의 데이터를 첨가한다. 따라서 반환되는 최종 결과 데이터는 긴 쪽의 데이터와 길이가 같다.

BIT_XOR 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.BIT_XOR
    (
        data1 IN RAW, data2 IN RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data1피연산자이다.
    data2피연산자이다.
  • 반환값

    반환값설명
    RAWdata1과 data2의 XOR 연산 결과를 반환한다.
    NULLdata1과 data2 중 하나라도 NULL인 경우에 반환한다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.BIT_XOR('123', '456'));
    END;
    /
    0575
    
    PSM completed
    SQL> 

43.2.5. CAST_FROM_BINARY_DOUBLE

주어진 BINARY_DOUBLE 타입의 값을 RAW 타입의 데이터로 변환하여 반환하는 함수이다. 반환된 데이터는 8bytes의 길이를 가지며, 지정된 endian에 따라 Byte 순서가 결정된다.

파라미터로 주어진 endian의 값은 RAW 타입의 데이터가 저장되는 endian을 뜻한다. 즉, 시스템이 little-endian이고, 파라미터가 big-endian인 경우 RAW 타입의 데이터에는 입력 값 n의 Byte 순서와 반대되는 순서로 Byte 값이 저장된다. 파라미터가 little-endian이라면 시스템의 Byte 순서와 동일한 순서로 Byte 값이 저장된다.

CAST_FROM_BINARY_DOUBLE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_FROM_BINARY_DOUBLE 
    (
        n           IN          BINARY_DOUBLE,
        endian      IN          PLS_INTEGER     DEFAULT 1
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    n변환할 BINARY_DOUBLE 값이다.
    endian

    변환할 endian이다.

    1(big-endian) 또는 2(little-endian) 중 하나이다.

  • 반환값

    반환값설명
    RAWBINARY_DOUBLE 타입의 값의 바이너리 표현을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_FROM_BINARY_DOUBLE(1.5d));
    END;
    /
    3FF8000000000000
    
    PSM completed
    SQL> 

43.2.6. CAST_FROM_BINARY_FLOAT

주어진 BINARY_FLOAT 타입의 값을 RAW 타입의 데이터로 변환하여 반환하는 함수이다. 반환된 데이터는 4bytes의 길이를 가지며, 지정된 endian에 따라 Byte 순서가 결정된다.

파라미터로 주어진 endian의 값은 RAW 타입의 데이터가 저장되는 endian을 뜻한다. 즉, 시스템이 little-endian이고, 파라미터가 big-endian인 경우 RAW 타입의 데이터에는 입력 값 n의 Byte 순서와 반대되는 순서로 Byte 값이 저장된다. 파라미터가 little-endian이라면 시스템의 Byte 순서와 동일한 순서로 Byte 값이 저장된다.

CAST_FROM_BINARY_FLOAT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_FROM_BINARY_FLOAT 
    (
        n           IN          BINARY_FLOAT,
        endian      IN          PLS_INTEGER     DEFAULT 1
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    n변환할 BINARY_FLOAT 값이다.
    endian

    변환할 endian이다.

    1(big-endian) 또는 2(little-endian) 중 하나이다.

  • 반환값

    반환값설명
    RAWBINARY_FLOAT 타입의 값의 바이너리 표현을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_FROM_BINARY_FLOAT(1.5f));
    END;
    /
    3FC00000
    
    PSM completed
    SQL> 

43.2.7. CAST_FROM_BINARY_INTEGER

주어진 BINARY_INTEGER 타입의 값을 RAW 타입의 데이터로 변환하여 반환하는 함수이다. 반환된 데이터는 4bytes의 길이를 가지며, 지정된 endian에 따라 Byte 순서가 결정된다.

파라미터로 주어진 endian의 값은 RAW 타입의 데이터가 저장되는 endian을 뜻한다. 즉, 시스템이 little-endian이고, 파라미터가 big-endian인 경우 RAW 타입의 데이터에는 입력 값 n의 Byte 순서와 반대되는 순서로 Byte 값이 저장된다. 파라미터가 little-endian이라면 시스템의 Byte 순서와 동일한 순서로 Byte 값이 저장된다.

CAST_FROM_BINARY_INTEGER 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_FROM_BINARY_INTEGER 
    (
        n           IN          BINARY_INTEGER,
        endian      IN          PLS_INTEGER         DEFAULT 1
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    n변환할 BINARY_INTEGER 값이다.
    endian

    변환할 endian이다.

    1(big-endian) 또는 2(little-endian) 중 하나이다.

  • 반환값

    반환값설명
    RAWBINARY_INTEGER 타입의 값의 바이너리 표현을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_FROM_BINARY_INTEGER(10));
    END;
    /
    0000000A
    
    PSM completed
    SQL> 

43.2.8. CAST_FROM_NUMBER

주어진 NUMBER 타입 값을 RAW 타입의 데이터로 변환하여 반환하는 함수이다. 반환된 바이너리 데이터는 입력된 값에 대한 Tibero의 내부 표현이며, 반환된 데이터의 길이는 입력 값에 따라 가변 길이를 가진다.

파라미터로 주어진 endian의 값은 RAW 타입의 데이터가 저장되는 endian을 뜻한다. 즉, 시스템이 little-endian이고, 파라미터가 big-endian인 경우 RAW 타입의 데이터에는 입력 값 n의 Byte 순서와 반대되는 순서로 Byte 값이 저장된다. 파라미터가 little-endian이라면 시스템의 Byte 순서와 동일한 순서로 Byte 값이 저장된다.

CAST_FROM_NUMBER 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_FROM_NUMBER 
    (
        n           IN          NUMBER
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    n변환할 숫자형 값이다.
  • 반환값

    반환값설명
    RAW숫자형 값의 바이너리 표현을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_FROM_NUMBER(1.5));
    END;
    /
    03C181B2
    
    PSM completed
    SQL> 

43.2.9. CAST_TO_BINARY_DOUBLE

주어진 RAW 타입의 데이터를 BINARY_DOUBLE 타입의 값으로 변환하여 반환하는 함수이다. 입력되는 바이너리 데이터는 8bytes의 길이를 가진다.

CAST_TO_BINARY_DOUBLE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_TO_BINARY_DOUBLE 
    (
        r           IN          RAW,
        endian      IN          PLS_INTEGER     DEFAULT 1
    ) 
    RETURN BINARY_DOUBLE;
  • 파라미터

    파라미터설명
    r변환할 바이너리 데이터이다.
    endian

    바이너리 데이터의 endian이다.

    1(big-endian) 또는 2(little-endian) 중 하나이다.

  • 반환값

    반환값설명
    BINARY_DOUBLERAW 타입의 데이터를 BINARY_DOUBLE 타입의 값으로 변환한 값을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    DECLARE
        bin raw(100);
    BEGIN
        bin := UTL_RAW.CAST_FROM_BINARY_DOUBLE(1.5d);
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_BINARY_DOUBLE(bin));
    END;
    /
    1.5E+00
    
    PSM completed
    SQL> 

43.2.10. CAST_TO_BINARY_FLOAT

주어진 RAW 타입의 데이터를 BINARY_FLOAT 타입의 값으로 변환하여 반환하는 함수이다. 입력되는 바이너리 데이터는 4bytes의 길이를 가진다.

CAST_TO_BINARY_FLOAT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_TO_BINARY_FLOAT 
    (
        r           IN          RAW,
        endian      IN          PLS_INTEGER     DEFAULT 1
    ) 
    RETURN BINARY_FLOAT;
  • 파라미터

    파라미터설명
    r변환할 바이너리 데이터이다.
    endian

    바이너리 데이터의 endian이다.

    1(big-endian) 또는 2(little-endian) 중 하나이다.

  • 반환값

    반환값설명
    BINARY_FLOATRAW 타입의 데이터를 BINARY_FLOAT 타입의 값으로 변환한 값을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    DECLARE
        bin raw(100);
    BEGIN
        bin := UTL_RAW.CAST_FROM_BINARY_FLOAT(1.5f);
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_BINARY_FLOAT(bin));
    END;
    /
    1.5E+00
    
    PSM completed
    SQL> 

43.2.11. CAST_TO_BINARY_INTEGER

주어진 RAW 타입의 데이터를 BINARY_INTEGER 타입의 값으로 변환하여 반환하는 함수이다. 입력되는 바이너리 데이터는 4bytes의 길이를 가진다.

CAST_TO_BINARY_INTEGER 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_TO_BINARY_INTEGER 
    (
        r           IN          RAW,
        endian      IN          PLS_INTEGER     DEFAULT 1
    ) 
    RETURN BINARY_INTEGER;
  • 파라미터

    파라미터설명
    r변환할 바이너리 데이터이다.
    endian

    바이너리 데이터의 endian이다.

    1(big-endian) 또는 2(little-endian) 중 하나이다.

  • 반환값

    반환값설명
    BINARY_INTEGERRAW 타입의 데이터를 BINARY_INTEGER 타입의 값으로 변환한 값을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    DECLARE
        bin raw(100);
    BEGIN
        bin := UTL_RAW.CAST_FROM_BINARY_INTEGER(777);
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_BINARY_INTEGER(bin));
    END;
    /
    777
    
    PSM completed
    SQL> 

43.2.12. CAST_TO_NUMBER

주어진 RAW 타입의 데이터를 NUMBER 타입 값으로 변환하여 반환하는 함수이다. 입력되는 바이너리 데이터는 NUMBER 타입 값에 대한 Tibero의 내부 표현이며 가변 길이를 갖는다.

CAST_TO_NUMBER 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_TO_NUMBER
    (
        r           IN          RAW
    ) 
    RETURN NUMBER;
  • 파라미터

    파라미터설명
    r변환할 바이너리 데이터이다.
  • 반환값

    반환값설명
    NUMBERRAW 타입의 데이터를 NUMBER 타입 값으로 변환한 값을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예외 상황

    예외 상황설명
    INVALID_ENDIANendian의 값이 1이나 2가 아닌 경우이다.
  • 예제

    DECLARE
        bin raw(100);
    BEGIN
        bin := UTL_RAW.CAST_FROM_NUMBER(1004);
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_NUMBER(bin));
    END;
    /
    1004
    
    PSM completed
    SQL> 

43.2.13. CAST_TO_RAW

주어진 VARCHAR 타입의 문자열을 RAW 타입의 데이터로 변환하여 반환하는 함수이다. 입력되는 문자열은 RAW 타입의 데이터의 문자열 표현이다.

CAST_TO_RAW 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_TO_RAW 
    (
        data        IN          VARCHAR2
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data변환할 문자열이다.
  • 반환값

    반환값설명
    RAWVARCHAR2의 바이너리 표현을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_RAW('0a3bcf'));
    END;
    /
    306133626366
    
    PSM completed
    SQL> 

43.2.14. CAST_TO_VARCHAR2

주어진 RAW 타입의 데이터를 VARCHAR2 타입의 문자열로 변환하여 반환하는 함수이다. 출력되는 문자열은 바이너리 데이터의 문자열 표현이다.

CAST_TO_VARCHAR2 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CAST_TO_VARCHAR2 
    (
        r           IN          RAW
    ) 
    RETURN VARCHAR2;
  • 파라미터

    파라미터설명
    r변환할 바이너리 데이터이다.
  • 반환값

    반환값설명
    VARCHAR2RAW 타입의 데이터를 VARCHAR2 타입으로 변환한 값을 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예제

    DECLARE
        bin RAW(100);
    BEGIN
        bin := UTL_RAW.CAST_TO_RAW('Nanobase');
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_VARCHAR2(bin));
    END;
    /
    Nanobase
    
    PSM completed
    SQL> 

43.2.15. COMPARE

주어진 두 개의 RAW 타입의 데이터를 비교하는 함수이다. 두 바이너리 데이터가 서로 다른 길이를 갖는다면, 짧은 쪽의 데이터에 파라미터 패드(pad)에 저장된 Byte를 첨부하여 같은 길이를 갖도록 한다.

COMPARE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.COMPARE 
    (
        data1       IN          RAW,
        data2       IN          RAW,
        pad         IN          RAW     DEFAULT NULL
    ) 
    RETURN INTEGER;
  • 파라미터

    파라미터설명
    data1비교할 첫 번째 피연산자이다.
    data2비교할 두 번째 피연산자이다.
    pad

    짧은 쪽에 첨부할 Byte이다.

    NULL이면 ‘00’을 첨부한다.

  • 반환값

    반환값설명
    0data1과 data2가 모두 NULL이거나 길이가 완전히 같을 경우에 반환한다.
    N >= 1data1과 data2가 다른 경우 서로 다른 Byte 값을 갖는 위치를 반환한다.
  • 예제

    DECLARE
        x RAW(20) := UTL_RAW.CAST_TO_RAW('ABCDEF');
        y RAW(20) := UTL_RAW.CAST_TO_RAW('ABCDFF');
    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.COMPARE(x, y));
    END;
    /
    5
    
    PSM completed
    SQL> 

43.2.16. CONCAT

주어진 RAW 타입의 데이터를 결합하여 반환하는 함수이다. 이 함수는 1~12개까지의 입력 파라미터를 가질 수 있다. 결합된 바이너리 데이터는 최대 32767bytes 길이를 가질 수 있으며, 이 길이를 초과하면 ERROR_EXP_CONCAT_TOO_LONG 에러를 발생한다.

CONCAT 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.CONCAT 
    (
        data1       IN          RAW,
        data2       IN          RAW,
        data3       IN          RAW,
        data4       IN          RAW,
        data5       IN          RAW,
        data6       IN          RAW,
        data7       IN          RAW,
        data8       IN          RAW,
        data9       IN          RAW,
        data10      IN          RAW,
        data11      IN          RAW,
        data12      IN          RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data1..data12결합할 바이너리 데이터이다. 12개까지 설정이 가능하다.
  • 반환값

    반환값설명
    RAW입력 값이 차례로 결합된 RAW를 반환한다.
    NULL입력 값이 모두 NULL인 경우에 반환한다.
  • 예제

    DECLARE
        x RAW(100) := UTL_RAW.CAST_TO_RAW('Give me liberty');
        y RAW(100) := UTL_RAW.CAST_TO_RAW(', or give me death');
        z RAW(200);
    BEGIN
        z := UTL_RAW.CONCAT(x, y);
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_VARCHAR2(z));
    END;
    /
    Give me liberty, or give me death
    
    PSM completed
    SQL> 

43.2.17. COPIES

주어진 RAW 타입의 데이터를 n번 반복하여 결합한 바이너리 데이터를 반환하는 함수이다. 반환되는 데이터의 길이는 최대 32767bytes 이내이어야 하며, 이 길이를 초과하면 예외 상황이 발생한다.

COPIES 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.COPIES 
    (
        data            IN          RAW, 
        n               IN          INTEGER
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data반복할 바이너리 데이터이다.
    n반복 횟수이다.
  • 예외 상황

    예외 상황설명
    VALUE_ERROR
    • 파라미터 data가 NULL인 경우이다.

    • 파라미터 n이 1보다 작은 경우이다.

    • 반환되는 데이터의 길이가 32767bytes를 초과하는 경우이다.

  • 예제

    DECLARE
        x VARCHAR2(100);
        y RAW(200);
        z RAW(200);
    BEGIN
        x := 'Books are ships which pass ';
        x := x || 'through the vast seas of time';
        y := UTL_RAW.CAST_TO_RAW(x);
        z := UTL_RAW.COPIES(y, 1);
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_VARCHAR2(z));
    END;
    /
    Books are ships which pass through the vast seas of time
    
    PSM completed
    SQL> 

43.2.18. LENGTH

주어진 RAW 타입의 데이터의 Byte 길이를 반환하는 함수이다.

LENGTH 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.LENGTH 
    (
        data        IN          RAW
    ) 
    RETURN INTEGER;
  • 파라미터

    파라미터설명
    data길이 반환의 대상이 되는 바이너리 데이터이다.
  • 반환값

    반환값설명
    NUMBER데이터의 길이를 반환한다.
    NULL입력 값이 NULL인 경우에 반환한다.
  • 예제

    DECLARE
        x RAW(20) := UTL_RAW.CAST_TO_RAW('Out of mind');
    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.LENGTH(x));
    END;
    /
    11
    
    PSM completed
    SQL> 

43.2.19. OVERLAY

RAW 타입의 원본 데이터를 RAW 타입의 대상 데이터에 복사하는 함수이다. 대상 데이터 내에 파라미터 pos가 가리키는 위치로부터 파라미터 len으로 지정한 길이만큼 원본 데이터를 복사한다.

원본 데이터의 길이가 len보다 짧다면 파라미터 패드에 저장된 Byte로 채운다. 대상 데이터의 길이가 pos보다 작다면 pos 위치에까지 pad byte로 채운 다음 연속하여 원본 데이터가 복사된다.

이 함수는 대상 데이터에 원본 데이터를 복사한 데이터를 반환하며, 대상 데이터 자체는 갱신되지 않는다. 반환되는 바이너리 데이터의 최대 길이는 32767bytes이다.

OVERLAY 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.OVERLAY
    (
        source_data     IN          RAW,
        target_data     IN          RAW,
        pos             IN          BINARY_INTEGER  DEFAULT 1,
        len             IN          BINARY_INTEGER  DEFAULT NULL,
        pad             IN          RAW             DEFAULT NULL
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    source_data원본 바이너리 데이터이다.
    target_data대상 바이너리 데이터이다.
    pos대상 데이터 내의 위치로, 1이상의 값을 가져야 한다.
    len

    복사할 원본 데이터의 길이로, 0이상의 값을 가져야 한다.

    NULL이면 원본 데이터 전체를 복사한다.

    pad

    첨부할 Byte이다.

    NULL이면 ‘00’을 첨부한다.

  • 예외 상황

    예외 상황설명
    VALUE_ERROR
    • 원본 데이터가 NULL이거나 길이가 0인 경우이다.

    • 대상 데이터가 NULL인 경우이다.

    • 파라미터 pos가 1보다 작거나, 파라미터 len이 0보다 작은 경우이다.

    • 반환되는 바이너리 데이터 길이가 32767bytes를 초과한 경우이다.

  • 예제

    DECLARE
        bin RAW(100);
    BEGIN
        bin := UTL_RAW.OVERLAY('ee', 'fabcdff', 2, 3, '12');
        DBMS_OUTPUT.PUT_LINE(bin);
    END;
    /
    0FEE1212
    
    PSM completed
    SQL> 

43.2.20. REVERSE

주어진 RAW 타입의 데이터의 Byte 순서를 역으로 변환하여 반환하는 함수이다. 반환되는 바이너리 데이터의 길이는 입력된 바이너리 데이터의 길이와 같다.

REVERSE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.REVERSE 
    (
        data        IN          RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data역으로 변환할 바이너리 데이터이다.
  • 예외 상황

    예외 상황설명
    VALUE_ERROR입력된 데이터가 NULL이거나 길이가 0인 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.REVERSE('abcd132'));
    END;
    /
    32D1BC0A
    
    PSM completed
    SQL> 

43.2.21. SUBSTR

주어진 RAW 타입의 데이터의 일부 또는 전체를 반환하는 함수이다. 입력된 데이터 내에서 파라미터 pos가 가리키는 위치로부터 파라미터 len이 지정한 길이만큼 반환한다. 바이너리 데이터가 NULL이면 결과 값으로 NULL을 반환한다.

SUBSTR 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.SUBSTR
    (
        data            IN          RAW,
        pos             IN          BINARY_INTEGER,
        len             IN          BINARY_INTEGER      DEFAULT NULL
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data바이너리 데이터이다.
    pos

    바이너리 데이터 내의 오프셋 위치이다.

    • pos가 1 이상이면 바이너리 데이터의 앞에서부터의 위치를 가리킨다.

    • pos가 –1 이하이면 바이너리 데이터의 뒤에서부터의 위치를 가리킨다.

    • pos는 0이 될 수 없다.

    len

    반환할 데이터의 길이이다.

    NULL이면 pos 위치로부터 바이너리 데이터의 끝까지 반환한다.

  • 예외 상황

    예외 상황설명
    VALUE_ERROR파라미터 pos가 0이거나 파라미터 len이 1보다 작은 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.SUBSTR('abc1234', 2, 2));
    END;
    /
    BC12
    
    PSM completed
    SQL> 

43.2.22. TRANSLATE

주어진 RAW 타입의 데이터 내의 지정된 Byte를 변환하는 함수이다. 주어진 바이너리 데이터 내에 from_set에 포함된 Byte가 존재하면 해당 Byte는 to_set 내의 같은 위치에 포함된 대응되는 Byte로 대체된다. to_set의 길이가 작아서 같은 위치에 대응되는 Byte가 없다면 빈 Byte로 대체된다.

이 함수는 변환된 데이터를 반환하며, 입력된 바이너리 데이터 자체는 갱신되지 않는다.

TRANSLATE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.TRANSLATE 
    (
        data            IN          RAW,
        from_set        IN          RAW,
        to_set          IN          RAW
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data바이너리 데이터이다.
    from_set변환할 Byte 집합이다.
    to_set변환 후의 Byte 집합이다.
  • 예외 상황

    예외 상황설명
    VALUE_ERROR파라미터 from_set 또는 to_set이 NULL이거나 길이가 0인 경우이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.TRANSLATE('abcde', 'bc', '77'));
    END;
    /
    0A77DE
    
    PSM completed
    SQL> 

43.2.23. TRANSLITERATE

주어진 RAW 타입의 데이터 내의 지정된 Byte를 변환하는 함수이다. 주어진 바이너리 데이터 내에 from_set에 포함된 Byte가 존재하면 해당 Byte는 to_set 내의 같은 위치에 포함된 대응되는 Byte로 대체된다. to_set의 길이가 작아서 같은 위치에 대응되는 Byte가 없다면 패드 값으로 대체된다.

이 함수는 변환된 데이터를 반환하며, 입력된 바이너리 데이터 자체는 갱신되지 않는다.

TRANSLITERATE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.TRANSLITERATE 
    (
        data            IN          RAW,
        to_set          IN          RAW     DEFAULT NULL,
        from_set        IN          RAW     DEFAULT NULL,
        pad             IN          RAW     DEFAULT NULL
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    data바이너리 데이터이다.
    to_set변환 후의 Byte 집합이다.
    from_set변환할 Byte 집합이다.
    pad

    to_set의 길이가 from_set의 길이보다 짧을 때 사용될 1byte RAW이다.

    pad로 입력된 값은 길이에 관계없이 1byte만 사용하게 된다.

  • 예외 상황

    예외 상황설명
    VALUE_ERRORdata가 NULL이거나 길이가 0인 경우
  • 예제

    DECLARE
        bin RAW(100);
    BEGIN
        bin := UTL_RAW.TRANSLITERATE('abcde', 'cd', 'bcde');
        DBMS_OUTPUT.PUT_LINE(bin);
    END;
    /
    0ACD00
    
    PSM completed
    SQL> 

43.2.24. XRANGE

주어진 start_byte RAW 데이터부터 end_byte RAW 데이터까지 1byte씩 증가시켜 나열한 결과를 반환하는 함수이다. start_byte가 end_byte보다 더 크다면 start_byte에서 시작해서 0xFF까지 증가시킨 후 0x00부터 다시 증가시켜 end_byte에서 끝내게 된다.

XRANGE 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    UTL_RAW.XRANGE 
    (
        start_byte      IN          RAW     DEFAULT NULL,
        end_byte        IN          RAW     DEFAULT NULL
    ) 
    RETURN RAW;
  • 파라미터

    파라미터설명
    start_byte결과 값의 시작 Byte이다.
    end_byte결과 값의 종료 Byte이다.
  • 예제

    BEGIN
        DBMS_OUTPUT.PUT_LINE(UTL_RAW.XRANGE('a', 'd'));
    END;
    /
    0A0B0C0D
    
    PSM completed
    SQL>