[ORACLE]오라클 DBMS_OUTPUT이란?

KosMos·2022년 11월 16일
0

DBMS_OUTPUT 패키지는 PL/SQL 블록(BEGIN ~ END)이나 프로시저, 함수 등 SUB PROGRAM 및 패키지, 트리거등에서 메시지를 출력할 수 있는 기능을 제공하는데 메시지를 버퍼에 저장하고 버퍼에서 읽어오기 위한 기능을 제공하는 오라클 패키지 입니다.

이 패키지의 PUT 프로시저 및 PUT_LINE 프로시저를 사용하면 다른 트리거, 프로시저 또는 패키지에서 읽을 수 있는 정보를 버퍼에 저장할 수 있고, 별도의 PL/SQL 프로시저 또는 익명 블록에서 GET_LINE 프로시저 및 GET_LINES 프로시저를 호출하여 버퍼링된 정보를 표시할 수 있습니다.

ENABLE 프로시저를 호출하여 버퍼를 할당 하며(기본 20000 바이트), PUT, PUT LINE으로 버퍼에 메시지를 넣습니다. 버퍼 메시지의 각 라인은 라인끝(CARRIAGE RETURN/LINE FEED) 값을 가지고 있으며 CHR(13) || CHR(10)을 DBMS_OUT으로 출력하면 동일한 효과를 얻습니다.

PUT, PUT LINE으로 버퍼에 저장된 메시지는 GET_LINE, GET_LINES 으로 읽어 들일수 있으며 DBMS_OUTPUT.DISABLE 프로시저로 할당된 버퍼를 제거 합니다.

GET_LINES으로 읽을 때 라인을 읽어 들일 변수의 타입으로 DBMS_OUT 패키지에는 CHARARR 타입이 정의되어 있는데 형식은 다음과 같습니다.

TYPE CHARARR IS TABLE OF VARCHAR2(32767);

SQL*Plus의 경우 SQL 문 또는 익명 PL/SQL 호출을 실행한 후 GET_LINES를 호출합니다.

DBMS_OUTPUT.ENABLE(buffer_size IN INTEGER DEFAULT 20000); ⇒ 메시지 출력 활성화, NULL을 입력하면 buffer size는 무한

set serveroutput on

spool c:\logs\dbms.txt

BEGIN

-- 버퍼를 활성화, 기본버퍼 사이즈는 20000 바이트

dbms_output.enable;

dbms_output.put('굿 데이2!!');

dbms_output.put_line('안녕하세요~');

dbms_output.new_line();

dbms_output.put_line('즐거운 하루 되세요~');

--dbms_output.put('굿 데이!!');

dbms_output.put('굿 데이2!!');

dbms_output.put(CHR(13) || CHR(10));

dbms_output.put_line('안녕하세요2~');

--dbms_output.put('굿 데이2!!');

END;

create or replace procedure DBMS_TEST

is

begin

dbms_output.enable;

DBMS_OUTPUT.PUT_LINE('test1');

DBMS_OUTPUT.PUT_LINE('test2');

DBMS_OUTPUT.PUT_LINE('test3');

end;

declare

lines dbms_output.chararr;

num_lines number := 3;

begin

DBMS_TEST;

-- 아래 GET_LINE이하를 주석으로 막고 실행하면 프로시저에서 출력한 형태로 출력

dbms_output.get_lines(lines, num_lines);

FOR i IN 1..num_lines LOOP

  dbms_output.put_line(i || '->' || lines(i)); 

END LOOP;

end;

declare

message VARCHAR(1024);

status INTEGER;

begin

DBMS_TEST;

DBMS_OUTPUT.GET_LINE(message, status);

DBMS_OUTPUT.PUT_LINE(message);

DBMS_OUTPUT.PUT_LINE(status);

end;

0개의 댓글