제59장 UTL_RAW

내용 목차

59.1. 개요
59.2. 함수
59.2.1. BIT_AND
59.2.2. BIT_COMPLEMENT
59.2.3. BIT_OR
59.2.4. BIT_XOR
59.2.5. CAST_FROM_BINARY_DOUBLE
59.2.6. CAST_FROM_BINARY_FLOAT
59.2.7. CAST_FROM_BINARY_INTEGER
59.2.8. CAST_FROM_NUMBER
59.2.9. CAST_TO_BINARY_DOUBLE
59.2.10. CAST_TO_BINARY_FLOAT
59.2.11. CAST_TO_BINARY_INTEGER
59.2.12. CAST_TO_NUMBER
59.2.13. CAST_TO_RAW
59.2.14. CAST_TO_VARCHAR2
59.2.15. COMPARE
59.2.16. CONCAT
59.2.17. COPIES
59.2.18. LENGTH
59.2.19. OVERLAY
59.2.20. REVERSE
59.2.21. SUBSTR
59.2.22. TRANSLATE
59.2.23. TRANSLITERATE
59.2.24. XRANGE

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

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

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

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

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

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

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

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

  • 프로토타입

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

    파라미터설명
    overlay_str원본 바이너리 데이터이다.
    target대상 바이너리 데이터이다.
    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>