시스템 패키지

CUBRID 에서는 사용자 편의를 위해 시스템 패키지를 제공한다. 향후 버전에서 더 많은 패키지가 추가되어 CUBRID의 기능이 확장될 예정이며 현재 버전에서는 DBMS_OUTPUT 패키지만을 제공하고 있다.

DBMS_OUTPUT

DBMS_OUTPUT 패키지는 문자열 메시지를 DBMS_OUTPUT 버퍼에 저장하고 읽어오기 위한 기능을 제공한다. 저장 프로시저/함수 개발자는 이 패키지의 PUT_LINE이나 PUT 함수로 원하는 메시지를 DBMS_OUTPUT 버퍼에 쌓을 수 있다. CSQL이나 DBeaver 같은 클라이언트 도구들은 이 패키지의 ENABLE, DISABLE, GET_LINE, GET_LINES 함수들을 사용하여 메시지 저장 기능을 활성화/비활성화하고 버퍼에 쌓인 메시지들을 가져온다. 개발자는 프로그램 진행 상황 확인이나 디버깅을 위해 이 메시지들을 유용하게 사용할 수 있다.

이 섹션에서는 DBMS_OUTPUT 패키지의 사용법과 활용 예시를 설명한다. DBMS_OUTPUT 패키지의 함수는 다음과 같다:

DBMS_OUTPUT.ENABLE

DBMS_OUTPUT.ENABLE(size)

DBMS_OUTPUT 메시지 버퍼를 활성화하고, 메시지를 저장할 버퍼의 크기를 설정한다.

Parameters:

size – 버퍼의 크기를 지정하며, 이 값은 바이트 단위로 지정한다. 최대 크기는 32767 바이트이며 이 값을 초과하면 오류가 발생한다.

Note

CSQL 인터프리터에서 ;server-output on 을 호출하면 내부적으로 기본값인 DBMS_OUTPUT.ENABLE(20000)을 호출한 것과 동일하다. 자세한 내용은 CSQL 세션명령어 server-output을 참고한다.

DBMS_OUTPUT.DISABLE

DBMS_OUTPUT.DISABLE()

현재 버퍼에 저장된 메시지를 제거하고 버퍼를 비활성화한다. 따라서 DBMS_OUTPUT 패키지 내의 다른 프로시저를 호출하더라도 아무런 출력이 나타나지 않는다.

Note

CSQL 인터프리터에서 ;server-output off 을 호출하면 내부적으로 DBMS_OUTPUT.DISABLE()을 호출한 것과 같다. 자세한 내용은 CSQL 세션명령어 server-output을 참고한다.

DBMS_OUTPUT.PUT

DBMS_OUTPUT.PUT(str VARCHAR)

지정된 문자열을 줄바꿈 없이 버퍼에 저장한다.

Parameters:

str – 저장할 문자열을 지정한다. 저장할 문자열이 NULL이면 아무런 동작도 하지 않는다.

DBMS_OUTPUT.PUT_LINE

DBMS_OUTPUT.PUT_LINE(line VARCHAR)

지정된 문자열을 버퍼에 저장하고 줄바꿈을 추가한다.

Parameters:

line – 저장할 문자열을 지정한다. 저장할 문자열이 NULL이면 아무런 동작도 하지 않는다.

DBMS_OUTPUT.NEW_LINE

DBMS_OUTPUT.NEW_LINE()

버퍼에 줄바꿈 문자를 추가한다. PUT 함수로 문자열을 추가한 후 NEW_LINE 함수를 호출하여 GET_LINE에서 줄 단위로 읽어올 수 있다.

DBMS_OUTPUT.GET_LINE

DBMS_OUTPUT.GET_LINE(line OUT VARCHAR, status OUT INTEGER)

버퍼에 저장된 문자열 메시지를 중 첫 번째 줄을 읽어온다. 읽어온 줄은 버퍼에서 삭제된다.

Parameters:
  • line – 버퍼로 부터 읽어온 문자열을 저장한다.

  • status – 문자열을 성공적으로 읽어왔을 경우 0을, 그렇지 않을 경우 1을 저장한다.

DBMS_OUTPUT.GET_LINES

DBMS_OUTPUT.GET_LINES(lines OUT VARCHAR, num_lines IN OUT INTEGER)

버퍼에 저장된 문자열 메시지를 지정된 줄 수만큼 읽어온다. 읽어온 줄은 버퍼에서 삭제된다.

Parameters:
  • lines – 버퍼로 부터 읽어온 문자열을 저장한다.

  • num_lines – 읽어올 줄의 수를 지정한다.

활용 예시

다음은 CSQL 인터프리터로 DBMS_OUTPUT 패키지를 사용한 단순한 예시이다. PUT_LINE 함수는 저장 함수 개발자가 사용하고 ENABLE, DISABLE, GET_LINE 함수들은 CSQL 인터프리터가 기능 구현을 위해 내부적으로 사용한다.

;server-output on   -- CSQL이 내부적으로 DBMS_OUTPUT.ENABLE 호출

CREATE OR REPLACE FUNCTION test() RETURN VARCHAR
AS
BEGIN
        DBMS_OUTPUT.PUT_LINE('Hello, World!');
        DBMS_OUTPUT.PUT_LINE('Hello, CUBRID!');
        DBMS_OUTPUT.PUT_LINE('Hello, DBMS_OUTPUT!');
        RETURN 'Success';
END;

SELECT test();

;server-output off  -- CSQL이 내부적으로 DBMS_OUTPUT.DISABLE 호출
test ()
=======
'Success'

<DBMS_OUTPUT>       <-- CSQL이 출력할 메시지를 가져오기 위해 내부적으로 DBMS_OUTPUT.GET_LINE 여러 번 호출
====
Hello, World!
Hello, CUBRID!
Hello, DBMS_OUTPUT!