내용 목차
본 장에서는 DBMS_OUTPUT 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명한다.
DBMS_OUTPUT은 메시지를 버퍼에 저장하고 버퍼로부터 메시지를 읽어오기 위한 인터페이스를 제공하는 패키지이다. 하나의 프러시저, 함수, 트리거 등에 의해 저장된 메시지는 다른 프러시저, 함수, 트리거 등에서 읽어올 수 있다.
DBMS_OUTPUT 패키지 내의 ENABLE 프러시저를 실행하여 메시지를 주고받기 위한 버퍼를 지정된 크기로 할당한다. 만약 메시지를 지정된 버퍼 크기 이상으로 저장하려고 하면 예외 상황이 발생한다.
할당된 버퍼는 DISABLE 프러시저를 실행하여 제거할 수 있으며, 다시 ENABLE 프러시저를 실행하기 전에는 GET_LINE 및 GET_LINES 또는 PUT 및 PUT_LINE, NEW_LINE 프러시저를 호출해도 무시된다. 버퍼 내의 메시지는 여러 라인으로 구성되어 있으며, 라인마다 라인 끝(End of Line, 이하 EOL) 문자로 끝난다.
PUT_LINE 프러시저를 통해 버퍼에 저장된 메시지는 GET_LINE이나 GET_LINES 프러시저를 실행하여 읽어올 수 있다.
다음은 DBMS_OUTPUT 패키지 내에 정의된 타입이다.
CHARARR
메시지 버퍼에서 읽어온 내용을 저장하기 위한 공간이다.
TYPE CHARARR IS TABLE OF VARCHAR2(32767)
본 절에서는 DBMS_OUTPUT 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.
할당된 메시지 버퍼를 제거하고, DBMS_OUTPUT 패키지 내의 다른 프러시저를 사용할 수 없게 하는 프러시저이다. 이 프로서지를 실행하면 메시지 버퍼에 남아있는 모든 메시지가 함께 제거된다.
프로토타입
DBMS_OUTPUT.DISABLE;
예제
BEGIN DBMS_OUTPUT.PUT_LINE('Before DISABLE'); DBMS_OUTPUT.DISABLE; DBMS_OUTPUT.PUT_LINE('After DISABLE'); END; / PSM completed SQL>
지정된 크기의 메시지 버퍼를 할당하고 DBMS_OUTPUT 패키지 내의 다른 프러시저를 사용할 수 있게 하는 프러시저이다. 이 프러시저를 여러 번 호출하면 가장 크게 지정한 크기로 메시지 버퍼를 할당한다. 이때 메시지 버퍼의 크기는 최소 2KB, 최대 1MB이다.
프로토타입
DBMS_OUTPUT.ENABLE ( buffer_size IN INTEGER DEFAULT 20000 );
파라미터
파라미터 | 설명 |
---|---|
buffer_size | 할당할 메시지 버퍼의 크기이다. (단위: Byte) |
예제
BEGIN DBMS_OUTPUT.DISABLE; DBMS_OUTPUT.PUT_LINE('Before ENABLE'); DBMS_OUTPUT.ENABLE(32768); DBMS_OUTPUT.PUT_LINE('After ENABLE'); END; / After ENABLE PSM completed SQL>
메시지 버퍼로부터 라인 단위로 메시지를 읽어오는 프러시저이다. 이 프러시저는 라인 단위로 메시지를 읽으며, 하나의 라인을 형성하지 않은 메시지는 읽지 않는다.
GET_LINE 또는 GET_LINES 프러시저를 호출한 후에 PUT 또는 PUT_LINE 프러시저를 호출하면, 현재까지 메시지 버퍼에 남아 있던 메시지는 모두 제거된다.
한 라인의 메시지는 최대 255bytes의 크기를 가지므로, 출력 파라미터의 크기를 충분하게 설정해야 한다.
GET_LINE, GET_LINES 프러시저의 세부 내용은 다음과 같다.
프로토타입
GET_LINE
GET_LINE 프러시저는 한 번 호출될 때마다 하나의 라인만을 읽어온다.
DBMS_OUTPUT.GET_LINE ( line OUT VARCHAR, status OUT INTEGER );
GET_LINES
GET_LINE 프러시저는 지정된 수만큼, 한 번에 여러 라인의 메시지를 읽어온다. 이때 메시지 버퍼로부터 실제로 읽어온 메시지 라인의 수를 반환한다. 만약 메시지 버퍼 내에 충분한 수의 메시지 라인이 없어서 지정된 수만큼의 메시지 라인을 가져오지 못하면, 가져온 메시지 라인의 수만큼만 저장된다.
DBMS_OUTPUT.GET_LINES ( lines OUT CHARARR, numlines IN OUT INTEGER );
파라미터
파라미터 | 설명 |
---|---|
line, lines | 메시지 버퍼로부터 읽어 온 한 라인 또는 여러 라인의 메시지이다. |
status |
|
numlines | 읽어 올 메시지 라인의 수를 입력하고, 실제로 읽어 온 메시지 라인의 수를 출력한다. |
예제
GET_LINE
DECLARE message VARCHAR(1024); status INTEGER; BEGIN DBMS_OUTPUT.PUT_LINE('A poet is the painter of the soul'); DBMS_OUTPUT.PUT_LINE('Faith without deeds is useless'); DBMS_OUTPUT.PUT_LINE('Forgiveness is better than revenge'); DBMS_OUTPUT.GET_LINE(message, status); DBMS_OUTPUT.PUT_LINE(message); END; / A poet is the painter of the soul PSM completed SQL>
GET_LINES
DECLARE message_arr DBMS_OUTPUT.CHARARR; num_lines INTEGER := 4; BEGIN DBMS_OUTPUT.PUT('A poet is '); DBMS_OUTPUT.PUT('the painter of the soul'); DBMS_OUTPUT.NEW_LINE; DBMS_OUTPUT.PUT_LINE('Faith without deeds is useless'); DBMS_OUTPUT.PUT_LINE('Forgiveness is better than revenge'); DBMS_OUTPUT.GET_LINES(message_arr, num_lines); DBMS_OUTPUT.PUT_LINE(message_arr(2)); END; / Faith without deeds is useless PSM completed SQL>
메시지 버퍼에 EOL 문자를 저장하는 프러시저이다.
PUT 프러시저로 메시지를 저장한 경우 EOL 문자가 없으므로 라인 단위로 메시지를 읽는 GET_LINE, GET_LINES 프러시저로 문자열을 읽어 올 수 없다. 단, NEW_LINE 프러시저를 사용하면 GET_LINE, GET_LINES 프러시저로 문자열을 읽어 올 수 있다.
프로토타입
DBMS_OUTPUT.NEW_LINE;
예제
BEGIN DBMS_OUTPUT.PUT_LINE('The will of a man is his happiness'); DBMS_OUTPUT.NEW_LINE; DBMS_OUTPUT.PUT_LINE('Love your neighbor as yourself'); END; / The will of a man is his happiness Love your neighbor as yourself PSM completed SQL>
메시지 버퍼에 메시지를 저장하는 프러시저이다.
PUT, PUT_LINE 프러시저의 세부 내용은 다음과 같다.
프로토타입
PUT
PUT 프러시저는 하나의 라인을 여러 번에 걸쳐 저장할 수 있다. 버퍼에 저장되는 메시지의 마지막 라인 끝에 EOL 문자가 첨부되지 않는다.
DBMS_OUTPUT.PUT ( data IN NUMBER );
DBMS_OUTPUT.PUT ( data IN VARCHAR );
PUT_LINE
PUT_LINE 프러시저는 PUT 프러시저와는 반대로 버퍼에 저장되는 메시지의 마지막 라인 끝에 EOL 문자를 첨부한다. 만약 EOL 문자만을 저장하려면 NEW_LINE 프러시저를 호출한다.
DBMS_OUTPUT.PUT_LINE ( data IN NUMBER );
DBMS_OUTPUT.PUT_LINE ( data IN VARCHAR );
파라미터
입력 값으로 주어진 파라미터의 데이터 타입은 NUMBER, VARCHAR, DATE 세 가지이며, 메시지로 저장되기 전에 항상 VARCHAR 타입으로 변환된다. NUMBER와 DATE 타입의 데이터는 TO_CHAR 함수를 적용하여 반환된 결과로 저장된다.
파라미터 | 설명 |
---|---|
data | 메시지 버퍼에 저장할 메시지 데이터이다. |
예외 상황
예외 상황 | 설명 |
---|---|
BUF_OVERFLOW | 메시지 버퍼의 최댓값을 초과한 경우이다. |