DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

DBMS_OUTPUT

DBMS 1
Tibero 가이드
Tibero System Package Guide
DBMS_OUTPUT
작성자
dataonair
작성일
2021-02-18 10:34
조회
1543




제12장DBMS_OUTPUT




내용 목차






12.1. 개요

12.2. 프로시저

12.2.1. DISABLE

12.2.2. ENABLE

12.2.3. GET_LINE, GET_LINES

12.2.4. NEW_LINE

12.2.5. PUT, PUT_LINE





12.1. 개요




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)





12.2. 프로시저




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




12.2.1. DISABLE




할당된 메시지 버퍼를 제거하고, DBMS_OUTPUT 패키지 내의 다른 프로시저를 사용할 수 없게 하는 프로시저이다. 이 프로서지를 실행하면 메시지 버퍼에 남아있는 모든 메시지가 함께 제거된다.

DISABLE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    DBMS_OUTPUT.DISABLE;
  • 예제
    BEGIN
    DBMS_OUTPUT.PUT_LINE('Before DISABLE');
    DBMS_OUTPUT.DISABLE;
    DBMS_OUTPUT.PUT_LINE('After DISABLE');
    END;
    /

    PSM completed
    SQL>





12.2.2. ENABLE




지정된 크기의 메시지 버퍼를 할당하고 DBMS_OUTPUT 패키지 내의 다른 프로시저를 사용할 수 있게 하는 프로시저이다. 이 프로시저를 여러 번 호출하면 가장 크게 지정한 크기로 메시지 버퍼를 할당한다. 이때 메시지 버퍼의 크기는 최소 2KB, 최대 2MB이다.

ENABLE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    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>





12.2.3. GET_LINE, GET_LINES




메시지 버퍼로부터 라인 단위로 메시지를 읽어오는 프로시저이다. 이 프로시저는 라인 단위로 메시지를 읽으며, 하나의 라인을 형성하지 않은 메시지는 읽지 않는다.GET_LINE 또는 GET_LINES 프로시저를 호출한 후에 PUT 또는 PUT_LINE 프로시저를 호출하면, 현재까지 메시지 버퍼에 남아 있던 메시지는 모두 제거된다.한 라인의 메시지는 최대 255byte의 크기를정해야 한다.

GET_LINE, GET_LINES 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입

    • GET_LINEGET_LINE 프로시저는 한 번 호출될 때마다 하나의 라인만을 읽어온다.
      DBMS_OUTPUT.GET_LINE 
      (
      line OUT VARCHAR,
      status OUT INTEGER
      );
    • GET_LINESGET_LINE 프로시저는 지정된 수만큼, 한 번에 여러 라인의 메시지 버퍼 내에 충분한 수의 메시지 라인이 없어서 지정된 수만큼의 메시지 라인을 가져오지 못하면, 가져온 메시지 라인의 수만큼만 저장된다.
      DBMS_OUTPUT.GET_LINES 
      (
      lines OUT CHARARR,
      num_lines IN OUT INTEGER
      );
  • 파라미터

    파라미터 설명
    line, lines 메시지 버퍼로부터 읽어 온 한 라인 또는 여러 라인의 메시지이다.
    status

    • 메시지를 성공적으로 읽어 온 경우에는 0을 반환한다.
    • 메시지를 성공적으로 읽어 오지 못한 경우에는 1을 반환한다 .
    num_lines 읽어 올 메시지 라인의 수를 입력하고, 실제로 읽어 온 메시지 라인의 수를 출력한다.
  • 예제

    • 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>





12.2.4. NEW_LINE




메시지 버퍼에 EOL 문자를 저장하는 프로시저이다.PUT 프로시저로 메시지를 저장한 경우, EOL 문자가 없으므로 라인 단위로 메시지를 읽는 GET_LINE, GET_LINES 프로시저로 문자열을 읽어 올 수 없다. 단, NEW_LINE 프로시저를 사용하면 GET_LINE, GET_LINES 프로시저로 문자열을 읽어 올 수 있다.

NEW_LINE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    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>





12.2.5. PUT, PUT_LINE




메시지 버퍼에 메시지를 저장하는 프로시저이다.

PUT, PUT_LINE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입

    • PUTPUT 프로시저는 하나의 라인을 여러 번에 걸쳐 저장할 수 있다. 버퍼에 저장되는 메시지의 마지막 라인 끝에 EOL 문자가 첨부되지 않는다.
      DBMS_OUTPUT.PUT(data IN NUMBER);
      DBMS_OUTPUT.PUT(data IN VARCHAR);
    • PUT_LINEPUT_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 메시지 버퍼의 최댓값을 초과한 경우이다.





???