제23장 DBMS_ROWID

내용 목차

23.1. 개요
23.2. 프러시저
23.2.1. ROWID_INFO
23.3. 함수
23.3.1. ROWID_CREATE
23.3.2. ROWID_CREATE_WITH_RELATIVE_FNO
23.3.3. ROWID_SEGMENT
23.3.4. ROWID_BLOCK_NUMBER
23.3.5. ROWID_ROW_NUMBER
23.3.6. ROWID_ABSOLUTE_FNO
23.3.7. ROWID_TO_RELATIVE_FNO

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

23.1. 개요

DBMS_ROWID는 SQL 문장이나 PSM을 수행하여 얻은 ROWID에 담긴 정보를 보거나 임의의 ROWID를 만들기 위한 패키지이다. ROWID에는 세그먼트(segment), 블록, 절대 파일(absolute file), 로우의 번호에 대한 정보가 포함되어 있다.

23.2. 프러시저

본 절에서는 DBMS_ROWID 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.

23.2.1. ROWID_INFO

ROWID에 담긴 모든 정보를 한 번에 추출하기 위해 사용되는 프러시저이다. 프러시저이기 때문에 SQL 문장 내에서는 사용될 수 없다.

ROWID_INFO 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    PROCEDURE ROWID_INFO
    (
        rowid_in        IN   ROWID, 
        segment_number  OUT  NUMBER, 
        absolute_fno    OUT  NUMBER,
        block_number    OUT  NUMBER,
        row_number      OUT  NUMBER
    );
  • 파라미터

    파라미터설명
    rowid_in정보를 얻고자 하는 대상 ROWID이다.
    segment_numberROWID에서 추출한 세그먼트의 번호가 저장된다.
    absolute_fnoROWID에서 추출한 절대 파일의 번호가 저장된다.
    block_numberROWID에서 추출한 블록의 번호가 저장된다.
    row_numberROWID에서 추출한 로우의 번호가 저장된다.
  • 예제

    DBMS_ROWID.ROWID_INFO(rowid_1, sgmt_no, fno, blk_no, row_no);
    DBMS_OUTPUT.PUT_LINE('segment number : ' || sgmt_no);
    DBMS_OUTPUT.PUT_LINE('absolute file number : ' || fno);
    DBMS_OUTPUT.PUT_LINE('block number : ' || blk_no);
    DBMS_OUTPUT.PUT_LINE('row number : ' || row_no);

23.3. 함수

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

23.3.1. ROWID_CREATE

입력한 정보에 맞는 ROWID를 생성하는 함수이다. 주로 가져온 ROWID가 올바로 만들어진 것인지 확인해보는 용도로 사용한다. 사용자가 임의의 정보로 ROWID를 생성할 수도 있지만 큰 의미는 없다.

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

  • 프로토타입

    FUNCTION ROWID_CREATE
    (
        segment_number  IN   NUMBER, 
        absolute_fno    IN   NUMBER, 
        block_number    IN   NUMBER, 
        row_number      IN   NUMBER
    ) 
    RETURN ROWID;
  • 파라미터

    파라미터설명
    segment_number세그먼트의 번호이다.
    absolute_fno절대 파일의 번호이다.
    block_number파일 내의 블록의 번호이다.
    row_number블록 내의 로우의 번호이다.
  • 예제

    DBMS_ROWID.ROWID_INFO(rowid_1, sgmt_no, abs_fno, blk_no, row_no);
    my_rowid := DBMS_ROWID.ROWID_CREATE(sgmt_no, abs_fno, blk_no, row_no);
    DBMS_OUTPUT.PUT_LINE(rowid_1 || ' ' || my_rowid);

23.3.2. ROWID_CREATE_WITH_RELATIVE_FNO

입력한 정보에 맞는 ROWID를 생성하는 함수이다. ROWID_CREATE 함수에서는 절대 파일 번호를 사용하지만 ROWID_CREATE_WITH_RELATIVE_FNO 함수에서는 상대 파일 번호를 사용하여 ROWID를 생성한다.

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

  • 프로토타입

    FUNCTION ROWID_CREATE_WITH_RELATIVE_FNO
    (
        segment_number  IN   NUMBER, 
        relative_fno    IN   NUMBER, 
        block_number    IN   NUMBER, 
        row_number      IN   NUMBER
    ) 
    RETURN ROWID;
  • 파라미터

    파라미터설명
    segment_number세그먼트의 번호이다.
    relative_fno상대 파일의 번호이다.
    block_number파일 내의 블록의 번호이다.
    row_number블록 내의 로우의 번호이다.
  • 예제

    DBMS_ROWID.ROWID_INFO(rowid_1, sgmt_no, abs_fno, blk_no, row_no);
    rel_fno := DBMS_ROWID.ROWID_TO_RELATIVE_FNO(rowid_1);
    my_rowid := DBMS_ROWID.ROWID_CREATE_WITH_RELATIVE_FNO(sgmt_no, 
                      rel_fno, blk_no, row_no);
    DBMS_OUTPUT.PUT_LINE(rowid_1 || ' ' || my_rowid);

23.3.3. ROWID_SEGMENT

주어진 ROWID에서 세그먼트의 번호를 추출하여 반환하는 함수이다.

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

  • 프로토타입

    FUNCTION ROWID_SEGMENT
    (
        row_id   IN   ROWID
    ) 
    RETURN NUMBER;
  • 파라미터

    파라미터설명
    row_id정보를 추출할 ROWID이다.
  • 예제

    SELECT dbms_rowid.rowid_segment(rowid)
    FROM table;

23.3.4. ROWID_BLOCK_NUMBER

주어진 ROWID에서 파일 내의 블록의 번호를 추출하여 반환하는 함수이다.

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

  • 프로토타입

    FUNCTION ROWID_BLOCK_NUMBER
    (
        row_id   IN   ROWID
    ) 
    RETURN NUMBER;
  • 파라미터

    파라미터설명
    row_id정보를 추출할 ROWID이다.
  • 예제

    SELECT dbms_rowid.rowid_block_number(rowid)
    FROM table;

23.3.5. ROWID_ROW_NUMBER

주어진 ROWID에서 블록 내의 로우의 번호를 추출하여 반환하는 함수이다.

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

  • 프로토타입

    FUNCTION ROWID_ROW_NUMBER
    (
        row_id   IN   ROWID
    ) 
    RETURN NUMBER;
  • 파라미터

    파라미터설명
    row_id정보를 추출할 ROWID이다.
  • 예제

    SELECT dbms_rowid.rowid_row_number(rowid)
    FROM table;

23.3.6. ROWID_ABSOLUTE_FNO

주어진 ROWID에서 세그먼트 내의 절대 파일의 번호를 추출하여 반환하는 함수이다.

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

  • 프로토타입

    FUNCTION ROWID_ABSOLUTE_FNO
    (
        row_id    IN   ROWID
    ) 
    RETURN NUMBER;
  • 파라미터

    파라미터설명
    row_id정보를 추출할 ROWID이다.
  • 예제

    SELECT dbms_rowid.rowid_absolute_fno(rowid)
    FROM table;

23.3.7. ROWID_TO_RELATIVE_FNO

주어진 ROWID에서 절대 파일의 번호를 추출해 테이블 스페이스의 상대적인 파일 번호로 변환하는 함수이다.

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

  • 프로토타입

    FUNCTION ROWID_TO_RELATIVE_FNO
    (
        row_id    IN   ROWID
    ) 
    RETURN NUMBER;
  • 파라미터

    파라미터설명
    row_id정보를 추출할 ROWID이다.
  • 예제

    SELECT dbms_rowid.rowid_to_relative_fno(rowid)
    FROM table;