내용 목차
본 장에서는 DBMS_UTILITY 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
본 절에서는 DBMS_UTILITY 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명한다.
본 절에서는 DBMS_UTILITY 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.
테이블 이름들이 쉼표로 구분되어 나열된 문자열을 분석하여 테이블 이름들을 구성 요소로 하는 인덱스 테이블로 변환하는 프러시저이다.
COMMA_TO_TABLE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILITY.COMMA_TO_TABLE ( list IN VARCHAR2, tablen OUT BINARY_INTEGER, tab OUT UNCL_ARRAY );
파라미터
파라미터 | 설명 |
---|---|
list | 쉼표로 구분되어 있는 테이블 이름들의 목록 문자열이다. 테이블 이름들은 a [. b [. c]][ @ d ]로 설정한다. (a, b, c, d는 따옴표로 묶이거나 묶이지 않은 식별자 형태의 문자열) |
tablen | 생성되는 이름들의 갯수이다. |
tab | 테이블 이름들을 구성 요소로 갖는 인덱스 테이블이다. |
예제
declare tab_len binary_integer; tab dbms_utility.uncl_array; begin DBMS_UTILITY.COMMA_TO_TABLE('a,"b".c,d.e.f,g.h@i', tab_len, tab); for i in 1..tab_len loop dbms_output.put_line(tab(i)); end loop; end; /
현재 인스턴스의 instance number를 반환해주는 함수이다,
CURRENT_INSTANCE 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILTIY.CURRENT_INSTANCE RETURN NUMBER;
예제
SELECT dbms_utility.current_instance FROM dual;
콜 스택의 내용을 문자열로 반환하는 함수이다. 반환 문자열이 32767bytes를 초과하는 경우 원하는 결과를 얻지 못할 수 있다.
FORMAT_CALL_STACK 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILITY.FORMAT_CALL_STACK RETURN VARCHAR2;
예제
create or replace procedure proc3 as begin dbms_output.put_line (dbms_utility.format_call_stack); end; / create or replace procedure proc2 as begin proc3; end; / create or replace procedure proc1 as begin proc2; end; / begin proc1; end; / -- ----- PSM Call Stack ----- -- object line object -- handle number name -- 0x7f50fa3943a8 4 procedure SYS.PROC3 -- 0x7f50fa3942d0 4 procedure SYS.PROC2 -- 0x7f50fa3941f8 4 procedure SYS.PROC1 -- 0x7f50fa394120 2 anonymous block
BACKTRACE 에러 메시지 문자열을 반환하는 함수이다. 반환 문자열이 712bytes를 초과하는 경우 원하는 결과를 얻지 못할 수 있다.
FORMAT_ERROR_BACKTRACE 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE RETURN VARCHAR2;
예제
CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR0 IS variable positive; BEGIN variable := -1; END; / CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR1 IS BEGIN BACKTRACE_EXAMPLE_PR0 (); END; / CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR2 IS BEGIN BACKTRACE_EXAMPLE_PR1 (); END; / CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR3 IS BEGIN BACKTRACE_EXAMPLE_PR2 (); END; / CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR4 IS BEGIN BACKTRACE_EXAMPLE_PR3 (); END; / CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR5 IS BEGIN BACKTRACE_EXAMPLE_PR4 (); END; / CREATE OR REPLACE PROCEDURE BACKTRACE_EXAMPLE_PR6 IS BEGIN BACKTRACE_EXAMPLE_PR5 (); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() ); END; / begin BACKTRACE_EXAMPLE_PR6 (); end; / -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR0, line 5. -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR1, line 3. -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR2, line 3. -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR3, line 3. -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR4, line 2. -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR5, line 2. -- TBR-15163: Unhandled exception at SYS.BACKTRACE_EXAMPLE_PR6, line 3.
에러 스택의 내용을 문자열로 반환하는 함수이다. 반환 문자열이 712bytes를 초과하는 경우 원하는 결과를 얻지 못할 수 있다.
FORMAT_ERROR_STACK 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILITY.FORMAT_ERROR_STACK RETURN VARCHAR2;
예제
CREATE OR REPLACE PROCEDURE CALLSTACK_EXAMPLE_PR0 IS variable positive; BEGIN variable := -1; END; / CREATE OR REPLACE PROCEDURE CALLSTACK_EXAMPLE_PR1 IS BEGIN CALLSTACK_EXAMPLE_PR0 (); END; / CREATE OR REPLACE PROCEDURE CALLSTACK_EXAMPLE_PR2 IS BEGIN CALLSTACK_EXAMPLE_PR1 (); END; / begin CALLSTACK_EXAMPLE_PR2 (); exception when others then dbms_output.put_line (DBMS_UTILITY.FORMAT_ERROR_STACK); dbms_output.put_line ('exception handled.'); end; / --TBR-15035: Number is out of range. --exception handled.
주어진 문자열의 해시 값을 구하는 함수이다.
GET_HASH_VALUE 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILITY.GET_HASH_VALUE ( name IN VARCHAR2, base IN NUMBER, hash_size IN NUMBER ) RETURN NUMBER;
파라미터
파라미터 | 설명 |
---|---|
name | 해시 값을 얻고자 하는 문자열이다. |
base | 해시 값의 시작점이다. |
hash_size | 해시 테이블의 크기이다. 크기는 1 이상이어야 한다. |
예제
declare hash_value number; begin hash_value := DBMS_UTILITY.GET_HASH_VALUE('Oleg', 1000, 100); dbms_output.put_line(hash_value); end; /
지정된 초기 파라미터의 값을 구하는 함수이다.
GET_PARAMETER_VALUE 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_UTILITY.GET_PARAMETER_VALUE ( parnam IN VARCHAR2, intval IN OUT BINARY_INTEGER, strval IN OUT VARCHAR2 ) RETURN BINARY_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
parnam | 값을 얻고자 하는 파라미터 이름이다. |
intval | integer 파라미터의 값 혹은 string 파라미터의 길이 값이다. |
strval | string 파라미터의 값이다. |
예제
DECLARE parnam VARCHAR2(256); intval BINARY_INTEGER; strval VARCHAR2(256); partyp BINARY_INTEGER; BEGIN partyp := dbms_utility.get_parameter_value('MAX_SESSION_COUNT', intval, strval); dbms_output.put('parameter value is: '); IF partyp = 1 THEN dbms_output.put_line(strval); ELSE dbms_output.put_line(intval); END IF; IF partyp = 1 THEN dbms_output.put('parameter value length is: '); dbms_output.put_line(intval); END IF; dbms_output.put('parameter type is: '); IF partyp = 1 THEN dbms_output.put_line('string'); ELSE dbms_output.put_line('integer'); END IF; END;
현재 시간을 1/100초 단위의 숫자로 표현하는 함수이다. 일반적으로 시작과 끝에 호출하여 소요 시간을 측정하는 데 사용된다.
프로토타입
DBMS_UTILITY.GET_TIME RETURN NUMBER;
예제
declare s number; e number; c sys_refcursor; begin s := DBMS_UTILITY.GET_TIME; open c for select * from all_objects; close c; e := DBMS_UTILITY.GET_TIME; dbms_output.put_line(e - s); end; /