내용 목차
본 장에서는 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; /
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.
현재 시간을 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; /