콘텐츠로 이동

12. Altibase 저장 프로시저와 내장 함수#

Altibase는 다양한 종류의 내장된 저장 프로시저와 함수를 제공한다. 저장 프로시저 내에서의 파일 제어 함수와 TCP 접속 제어 관련 저장 프로시저가 그것이다. 이 장은 이들 저장 프로시저와 함수를 소개하고 그 사용법에 대해 설명한다.

이 장은 아래의 토픽을 포함한다.

  • 파일 제어

  • TCP 접속 제어

  • DBMS Stats

파일 제어#

프로시저의 파일 제어 기능은 운영 체제의 텍스트 파일에 대한 읽기와 쓰기를 가능하게 한다. 이 기능을 이용하여 사용자는 저장 프로시저 실행에 대한 별도의 메시지 등을 파일에 남길 수도 있으며, 파일로 결과를 출력하거나 파일로부터 데이터를 읽어와 테이블에 삽입하는 등 다양한 작업을 수행할 수 있다.

이 절은 이러한 파일 제어 기능에 대해서 설명한다.

디렉토리 관리#

저장 프로시저에서 파일들을 생성하고 제어하기 위해서는 이들 파일들이 저장될 디렉토리가 필요한데, 이는 데이터베이스 객체로서 DML문을 사용해서 생성하고 관리할 수 있다.

디렉토리 생성#

저장 프로시저 파일 제어 기능에서 사용하는 파일들을 저장할 디렉토리들은 CREATE DIRECTORY문을 사용하여 데이터베이스 객체로 생성한다.

CREATE DIRECTORY문을 수행하면 SYS_DIRECTORIES_ 메타 테이블에 디렉토리 정보가 등록되며, 실제 운영 체제의 파일 시스템에 디렉토리가 생성되지는 않는다. 따라서 사용자는 실제 파일 시스템에 디렉토리를 생성하는 작업을 먼저 수동으로 해야 한다.

사용자는 CREATE DIRECTORY문에 데이터베이스가 참조할 논리적인 디렉토리명과 실제 파일 시스템 상에서의 디렉토리 절대 경로를 명시해야 한다.

예를 들어 다음과 같이 /home/altibase/altibase_home/psm_msg 디렉토리 밑에 alti_dir1 디렉토리를 생성한다.

$ mkdir /home/altibase/altibase_home/psm_msg/alti_dir1

다음으로, alti_dir1 디렉토리 내의 파일들을 제어할 수 있도록 대응하는 디렉토리 객체를 데이터베이스 내에 생성한다.

iSQL> create directory alti_dir1 as '/home/altibase/altibase_home/psm_msg';
Create success.

디렉토리 변경#

CREATE OR REPLACE DIRECTORY문을 사용해 이미 생성한 디렉토리의 절대 경로를 다음과 같이 변경할 수 있다.

iSQL> create or replace directory alti_dir1 as '/home/altibase/altibase_home/psm_result';
Create success.

위의 예제에서 alti_dir1 디렉토리가 이미 데이터베이스에 존재할 경우에는 사용자가 명시한 절대 경로 정보를 변경하며, alti_dir1 디렉토리가 존재하지 않을 경우에는 새로운 객체를 데이터베이스에 생성한다.

디렉토리 삭제#

디렉토리 객체는 DROP DIRECTORY문을 사용해서 데이터베이스에서 삭제할 수 있다.

DROP DIRECTORY문을 사용해 디렉토리를 삭제하는 경우 데이터베이스에서 관리하는 오브젝트만 삭제되며 실제 파일 시스템 상의 디렉토리가 제거되는 것은 아니다.

따라서 사용자는 파일 시스템 상에 존재하는 불필요한 디렉토리와 파일들은 운영 체제 명령어를 이용해 직접 제거해야 한다.

다음은 DROP DIRECTORY문을 사용해 데이터베이스에서 디렉토리를 삭제하는 예제이다.

iSQL> DROP DIRECTORY alti_dir1;
Drop success.

파일 제어#

데이타 타입#

저장 프로시저 내에서 파일 제어를 위해서 Altibase는 FILE_TYPE이라는 데이터 타입을 지원한다.

FILE_TYPE은 내부적으로 파일 식별자 및 기타 정보를 가지고 있으나, 사용자가 직접 이 내부 데이터에 접근할 수는 없다.

저장 프로시저 내에서 FILE_TYPE 데이터 타입의 지역변수들은 파일 제어 관련 시스템 저장 프로시저 및 저장 함수들의 인자로 사용될 수 있다.

FILE_TYPE으로 변수를 선언하는 예제는 다음과 같다.

CREATE OR REPLACE PROCEDURE WRITE_T1
AS
    V1  FILE_TYPE;
    ID  INTEGER;
    NAME    VARCHAR(40);
BEGIN
……
END;
/

파일 제어 프로시저와 함수#

Altibase는 저장 프로시저 및 저장 함수 내에서 파일 제어와 관련해서 다음과 같은 시스템 프로시저와 함수를 제공한다.

시스템 프로시저 및 함수명 설명
FCLOSE 파일을 닫는다.
FCLOSE_ALL 현재 세션에 열려있는 모든 파일을 닫는다.
FCOPY 파일을 복사한다.
FFLUSH 파일에 데이터를 물리적으로 기록한다.
FOPEN 읽기 또는 쓰기 목적으로 파일을 오픈한다.
FREMOVE 파일을 삭제한다.
FRENAME 파일명을 변경한다.
GET_LINE 파일에서 한 라인을 읽는다.
IS_OPEN 파일이 열려있는지 검사한다.
NEW_LINE 개행 문자를 출력한다.
PUT 문자열을 파일에 기록한다
PUT_LINE 문자열에 개행 문자를 붙여서 파일에 기록한다 (= PUT+NEW_LINE).

위 표의 시스템 프로시저와 함수들은 최초 데이터베이스 생성시 시스템 내에서 자동 생성되는 저장 프로시저 및 저장 함수로 PUBLIC 시노님으로 정의되어 있어 임의의 사용자가 이들을 이용해 저장 프로시저 내에서 파일을 제어 할 수 있다.

이러한 시스템 프로시저 및 함수를 사용한 파일 제어 작업은 다음 그림과 같이 표현된다.

file_control

주의사항#

다음은 저장 프로시저 실행 시 오류를 발생시킬 수 있는 사항들이므로 주의해야 한다.

디렉토리 이름#

파일제어 함수 사용시 디렉토리 파라미터는 CREATE DIRECTORY문으로 생성한 디렉토리 객체의 이름을 사용하되 반드시 대문자로 표기한다.

예를 들어,

CREATE DIRECTORY alti_dir AS '…';

위와 같이 디렉토리 객체를 생성하였다면 저장 프로시저 내에서는 다음과 같이 사용해야 한다.

file = FOPEN( 'ALTI_DIR', 'a.txt', 'r' );

디렉토리 생성 시 소문자로 디렉토리 객체의 이름을 명시하여도 데이터베이스 내 객체 이름은 모두 대문자로 저장되기 때문에 시스템 프로시저 및 함수의 파라미터로 디렉토리 이름을 입력할 때는 대문자를 사용해야 한다.

한 라인의 문자열 길이#

파일 내 한 라인의 최대 문자열 길이는 32767 bytes를 넘을 수 없다. 만약 최대 길이를 초과할 경우 오류가 발생한다.

파일 데이터 타입#

FILE_TYPE은 사용자가 임의로 변수 값을 대입하거나 정보를 읽을 수 없으며, 시스템 프로시저 및 함수의 파라미터로만 사용할 수 있다.

파일 제어 관련 시스템 프로시저 및 함수#

파일 제어 관련 시스템 프로시저 및 함수들은 기본적인 시스템 정의 예외 외에 다른 예외들을 발생시킬 수 있다.

예를 들면 디스크 공간 부족, 열 수 있는 파일 핸들 부족, 또는 운영체제 상에서 오류가 발생할 경우 INVALID OPERATION 등의 예기치 않은 오류를 발생시킨다.

파일 제어 관련 시스템 프로시저 및 함수들은 인자를 잘못 넘겨 받은 경우 VALUE_ERROR EXCEPTION을 발생시킨다.

FCLOSE#

열려있는 파일 핸들을 닫고 다시 초기화 하는 기능을 제공하는 저장 프로시저다.

구문#

FCLOSE ( file IN OUT FILE_TYPE );

파라미터#

이름 입출력 데이터 타입 설명
file IN OUT FILE_TYPE 파일 핸들

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

수행 시 오류 발생 없이 항상 성공한다. 이미 닫힌 파일 핸들에 대해 수행할 때도 오류 없이 성공한다.

예제#

FOPEN후에는 FCLOSE를 호출하여 열린 파일 핸들을 다음과 같이 닫아 주어야 한다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
    V2 VARCHAR(1024);
BEGIN
    V1 := FOPEN( 'ALTI_DIR', 'schema.sql', 'r' );
    GET_LINE( V1, V2, 100 );
    PRINTLN(V2);
    FCLOSE(V1);
END;
/

FCLOSE_ALL#

현재 세션에 열려있는 모든 파일 핸들을 닫는 기능을 제공하는 저장 프로시저다. 저장 프로시저 수행 중 예외가 발생했을 때에도 파일을 닫기 위해서, 주로 예외 처리 시에 사용한다.

구문#

FCLOSE_ALL;

파라미터#

파라미터가 없다.

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

수행 시 오류를 발생시키지 않으며 항상 성공한다.

예제#

다음은 예외 처리 시 열려 있는 모든 파일 핸들을 닫는 예제이다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
    V2 VARCHAR(1024);
BEGIN
    V1 := FOPEN( 'ALTI_DIR', 'schema.sql', 'r' );
    GET_LINE( V1, V2, 100 );
    PRINTLN(V2);
FCLOSE(V1);
EXCEPTION
    WHEN READ_ERROR THEN
         PRINTLN('READ ERROR!!!');
         FCLOSE_ALL;
END;
/

FCOPY#

파일을 라인 단위로 복사하는 기능을 제공하는 저장 프로시저이다. 결과 파일이 해당 디렉토리 내에 존재하지 않을 경우에는 새로운 파일을 생성하여 소스 파일 내용을 복사하고, 이미 결과 파일이 존재하는 경우에는 오류 없이 그대로 내용을 덮어 쓴다.

구문#

FCOPY (
location IN VARCHAR(40),
filename IN VARCHAR(256),
dest_dir IN VARCHAR(40),
dest_file IN VARCHAR(256),
start_line IN INTEGER DEFAULT 1,
end_line IN INTEGER DEFAULT NULL);

파라미터#

이름 입출력 데이터 타입 설명
location IN VARCHAR(40) 소스 파일이 위치하는 경로에 해당하는 디렉토리 객체의 이름
filename IN VARCHAR(256) 소스 파일의 이름
dest_dir IN VARCHAR(40) 결과 파일이 위치하는 경로에 해당하는 디렉토리 객체의 이름
dest_file IN VARCHAR(256) 결과 파일의 이름
start_line IN INTEGER 복사할 시작 라인 번호
기본값: 1
end_line IN INTEGER 복사할 마지막 라인 번호. NULL로 주게 되면 파일의 끝까지 복사한다.
기본값: NULL

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

FCOPY는 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • INVALID_PATH

  • ACCESS_DENIED

  • INVALID_OPERATION

  • READ_ERROR

  • WRITE_ERROR

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 a.txt의 파일의 모든 내용을 b.txt에 복사하는 에제이다.

iSQL> EXEC FCOPY( 'ALTI_DIR', 'a.txt', 'ALTI_DIR', 'b.txt' );
Execute success.

$ cat a.txt
1-ABCDEFG
2-ABCDEFG
3-ABCDEFG
4-ABCDEFG
5-ABCDEFG
6-ABCDEFG
7-ABCDEFG
8-ABCDEFG
9-ABCDEFG
10-ABCDEFG

$ cat b.txt
1-ABCDEFG
2-ABCDEFG
3-ABCDEFG
4-ABCDEFG
5-ABCDEFG
6-ABCDEFG
7-ABCDEFG
8-ABCDEFG
9-ABCDEFG
10-ABCDEFG

다음은 특정 라인만을 a.txt에서 b.txt로 복사하는 예제이다.

iSQL> EXEC FCOPY( 'ALTI_DIR', 'a.txt', 'ALTI_DIR2', 'b.txt', 4, 9 );
Execute success.

$ cat a.txt
1-ABCDEFG
2-ABCDEFG
3-ABCDEFG
4-ABCDEFG
5-ABCDEFG
6-ABCDEFG
7-ABCDEFG
8-ABCDEFG
9-ABCDEFG
10-ABCDEFG

$ cat b.txt
4-ABCDEFG
5-ABCDEFG
6-ABCDEFG
7-ABCDEFG
8-ABCDEFG
9-ABCDEFG

FFLUSH#

파일에 물리적으로 기록하는 기능을 제공하는 저장 프로시저다.

구문#

FFLUSH ( file IN FILE_TYPE );

파라미터#

이름 입출력 데이터 타입 설명
file IN FILE_TYPE 파일 핸들

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

FFLUSH는 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • INVALID_FILEHANDLE

  • WRITE_ERROR

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 T1 테이블의 I1 칼럼의 모든 데이터를 파일에 한번에 기록하는 예제로 PUT_LINE의 마지막 인자인 autoflush 에 FALSE를 넘겨 PUT_LINE 호출 때마다 flush 하지 않고 마지막에 한번 FFLUSH를 호출해 flush 하는 예제이다.

CREATE OR REPLACE PROCEDURE PROC1
AS
   V1 FILE_TYPE;
   R2 T1%ROWTYPE;
   CURSOR C1 IS SELECT I1 FROM T1;
BEGIN
   V1 := FOPEN( 'ALTI_DIR', 'a.txt', 'w' );
   FOR R2 IN C1 LOOP
       PUT_LINE( V1, R2.I1, FALSE );
   END LOOP;
   FFLUSH(V1);
   FCLOSE(V1);
EXCEPTION
   WHEN INVALID_PATH THEN
       PRINTLN('CANNOT OPEN FILE.');
   WHEN NO_DATA_FOUND THEN
       PRINTLN('NO DATA FOUND.');
       FCLOSE( V1 );
END;
/

FOPEN#

파일을 열고 파일 핸들을 반환하는 기능을 제공하는 저장 함수이다.

구문#

FILE_TYPE variable :=
FOPEN (
         location IN VARCHAR(40),
         filename IN VARCHAR(256),
         open_mode IN VARCHAR(4) );

파라미터#

이름 입출력 데이터 타입 설명
location IN VARCHAR(40) 파일이 위치하는 경로에 해당하는 디렉토리 객체의 이름
filename IN VARCHAR(256) 파일의 이름
open_mode IN VARCHAR(4) 입력 가능 옵션은 다음 세 가지이다.
r: 읽기 w: 쓰기 a: 이어 쓰기
* 주의 사항: rw, wa와 같이 조합해서 사용 할 수 없다.

결과값#

성공적으로 수행할 경우 데이터 타입이 FILE_TYPE인 파일 핸들을 반환한다.

예외#

FOPEN은 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • INVALID_PATH

  • ACCESS_DENIED

  • INVALID_OPERATION

  • INVALID_MODE

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

파일을 읽거나 쓰기 위해서는 우선 FOPEN을 사용해 다음과 같이 파일을 열어야 한다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
    V2 VARCHAR(1024);
BEGIN
    V1 := FOPEN( 'ALTI_DIR', 'schema.sql', 'r' );
    GET_LINE( V1, V2, 100 );
    PRINTLN(V2);
    FCLOSE(V1);
END;
/

FREMOVE#

해당 파일을 삭제하는 기능을 제공하는 저장 프로시저다.

구문#

FREMOVE (
  location IN VARCHAR(40),
  filename IN VARCHAR(256));

파라미터#

이름 입출력 데이터 타입 설명
location IN VARCHAR(40) 파일이 위치하는 경로에 해당하는 디렉토리 객체의 이름
filename IN VARCHAR(256) 파일의 이름

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

FREMOVE는 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • INVALID_PATH

  • ACCESS_DENIED

  • DELETE_FAILED

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 파일을 삭제하는 예제이다.

--## 현재 디렉토리 내의 파일 리스트
$ ls
a.sql       a.txt       b.txt       schema.sql

--## FREMOVE 실행
iSQL> EXEC FREMOVE('ALTI_DIR','b.txt');
Execute success.

--# 저장 프로시저 수행 후 디렉토리내의 파일 리스트
$ ls
a.sql       a.txt       schema.sql

FRENAME#

UNIX mv 명령어와 동일한 기능을 가지며, 파일의 이름을 바꾸거나, 다른 위치로 옮기는 기능을 제공하는 저장 프로시저다.

구문#

FRENAME (
location IN VARCHAR(40),
filename IN VARCHAR(256),
dest_dir IN VARCHAR(40),
dest_file IN VARCHAR(256),
overwrite IN BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
location IN VARCHAR(40) 원본 파일이 위치하는 경로에 해당하는 디렉토리
filename IN VARCHAR(256) 원본 파일의 이름
dest_dir IN VARCHAR(40) 결과 파일이 위치하는 경로에 해당하는 디렉토리
dest_file IN VARCHAR(256) 결과 파일의 이름
overwrite IN BOOLEAN 이미 파일이 존재하는 경우 덮어 쓸지 여부를 지정한다.
TRUE: 기존 파일을 새로운 파일로 덮어 쓴다.
FALSE: 덮어 쓰지 않는다.
기본값: FALSE

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

FRENAME에서 발생 가능한 시스템 정의 예외들은 다음과 같다.

  • INVALID_PATH

  • ACCESS_DENIED

  • RENAME_FAILED

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 a.txt 파일을 result.txt로 이름을 변경하는 예제이다.

--## 현재 디렉토리내의 파일 리스트
$ ls
a.sql       a.txt       schema.sql

--## FRENAME 수행
iSQL> EXEC FRENAME('ALTI_DIR','a.txt','ALTI_DIR','result.txt',TRUE);
Execute success.

--# 저장 프로시저 수행 후 디렉토리내의 파일 리스트
$ ls
a.sql       result.txt  schema.sql

GET_LINE#

해당 파일에서 한 줄씩 읽어오는 기능을 제공하는 저장 프로시저다.

구문#

GET_LINE (
   file IN FILE_TYPE,
   buffer OUT VARCHAR(32768),
   len IN INTEGER DEFAULT NULL);

파라미터#

이름 입출력 데이터 타입 설명
file IN FILE_TYPE 파일 핸들
buffer OUT VARCHAR(32768) 파일에서 읽은 한 라인을 저장할 버퍼
len IN INTEGER 파일의 한 라인에서 읽어 올 최대 bytes 수로 입력하지 않을 경우 1024 bytes 크기만큼 읽어온다.
기본값: NULL

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

GET_LINE에서 발생 가능한 시스템 정의 예외는 다음과 같다.

  • NO_DATA_FOUND

  • READ_ERROR

  • INVALID_FILEHANDLE

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 파일의 한 라인에서 100 bytes를 읽어 출력하는 예제이다.

iSQL> CREATE OR REPLACE PROCEDURE PROC1
    2 AS
    3     V1 FILE_TYPE;
    4     V2 VARCHAR(1024);
    5 BEGIN
    6     V1 := FOPEN( 'ALTI_DIR', 'schema.sql', 'r' );
    7     GET_LINE( V1, V2, 100 );
    8     PRINTLN(V2);
    9     FCLOSE(V1);
    10 END;
    11 /
Create success.
iSQL> EXEC PROC1;
create table t1 (i1 integer, i2 integer, i3 integer);
Execute success.

IS_OPEN#

파일이 열려 있는지 여부를 검사하는 기능을 제공하는 저장 함수다.

구문#

BOOLEAN variable :=
IS_OPEN ( file IN FILE_TYPE );

파라미터#

이름 입출력 데이터 타입 설명
file IN FILE_TYPE 파일 핸들

결과값#

결과값은 BOOLEAN 데이터 타입으로 열려있으면 TRUE, 열려있지 않으면 FALSE를 반환한다.

예외#

파일 핸들이 정상적으로 열려 있는 경우에 TRUE를 반환하며 그 외의 경우에는 모두 FALSE를 반환하므로 수행 시 오류가 발생하지 않는다.

예제#

다음은 파일 핸들이 열려 있는지 없는지 검사하는 예제이다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
BEGIN
    IF IS_OPEN(V1) = FALSE THEN
        PRINTLN('V1 IS NOT OPENED.');
    ELSE
        PRINTLN('V1 IS OPENED.');
    END IF;
    V1 := FOPEN( 'ALTI_DIR', 'a.txt', 'w' );
    PRINTLN('FOPEN FUNCTION CALLED.');
    IF IS_OPEN(V1) = FALSE THEN
        PRINTLN('V1 IS NOT OPENED.');
    ELSE
        PRINTLN('V1 IS OPENED.');
    END IF;
    FCLOSE( V1 );
    PRINTLN('FCLOSE FUNCTION CALLED.');
    IF IS_OPEN(V1) = FALSE THEN
        PRINTLN('V1 IS NOT OPENED.');
    ELSE
        PRINTLN('V1 IS OPENED.');
    END IF;
END;
/

NEW_LINE#

파일에 해당 개수의 개행 문자를 기록하는 기능을 제공하는 저장 프로시저다.

구문#

NEW_LINE  (
file IN FILE_TYPE,
lines IN INTEGER DEFAULT 1 );

파라미터#

이름 입출력 데이터 타입 설명
file IN FILE_TYPE 파일 핸들
lines IN INTEGER 기록할 라인의 수 기본값: 1

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

NEW_LINE에서 발생 가능한 시스템 정의 예외는 다음과 같다.

  • INVALID_FILEHANDLE

  • WRITE_ERROR

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 파일에 문자열을 기록하는 예제이다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
BEGIN
    V1 := FOPEN( 'ALTI_DIR', 'a.txt', 'w' );
    PUT_LINE( V1, 'REPORT', TRUE );
    NEW_LINE( V1, 3 );
    PUT_LINE( V1, '------', TRUE );
    FCLOSE( V1 );
END;
/

--## 위의 저장 프로시저 수행 후 a.txt 파일 결과
$ cat a.txt
REPORT



------
$

PUT#

파일에 문자열을 기록하는 기능을 제공하는 저장 프로시저다.

구문#

PUT (
  file IN FILE_TYPE,
  buffer IN VARCHAR(32768));

파라미터#

이름 입출력 데이터 타입 설명
file IN FILE_TYPE 파일 핸들
buffer IN VARCHAR(32768) 기록할 문자열을 저장하고 있는 버퍼

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

PUT은 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • INVALID_FILEHANDLE

  • WRITE_ERROR

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 파일에 문자열을 기록하는 예제이다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
BEGIN
    V1 := FOPEN( 'ALTI_DIR', 'a.txt', 'w' );
    PUT( V1, 'REPORT');
    PUT( V1, '-->');
    PUT_LINE( V1, 'SUCCESS', TRUE );
    FCLOSE( V1 );
END;
/
--## 위의 저장 프로시저 수행 후 a.txt 파일 결과
$ cat a.txt
REPORT-->SUCCESS
$

PUT_LINE#

파일에 문자열을 포함한 한 라인을 기록하는 기능을 제공하는 저장 프로시저다.

구문#

PUT_LINE (
file IN FILE_TYPE,
buffer IN VARCHAR(32767),
autoflush IN BOOLEAN DEFAULT FALSE);

파라미터#

이름 입출력 데이터 타입 설명
file IN FILE_TYPE 파일 핸들
Buffer IN VARCHAR(32767) 기록할 문자열을 저장하고 있는 버퍼
autoflush IN BOOLEAN 호출할 때마다 flush할지 여부
기본값: FALSE

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

PUT_LINE는 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • INVALID_FILEHANDLE

  • WRITE_ERROR

예외 처리에 대한 자세한 설명은 이 장의 "파일 제어 예외 처리" 절을 참조한다.

예제#

다음은 파일에 문자열의 라인을 기록하는 예제이다.

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 FILE_TYPE;
BEGIN
    V1 := FOPEN('ALTI_DIR', 'a.txt', 'w');
    PUT_LINE(V1, '1-ABCDEFG');
    PUT_LINE(V1, '2-ABCDEFG');
    PUT_LINE(V1, '3-ABCDEFG');
    PUT_LINE(V1, '4-ABCDEFG');
    PUT_LINE(V1, '5-ABCDEFG');
    PUT_LINE(V1, '6-ABCDEFG');
    PUT_LINE(V1, '7-ABCDEFG');
    PUT_LINE(V1, '8-ABCDEFG');
    PUT_LINE(V1, '9-ABCDEFG');
    PUT_LINE(V1, '10-ABCDEFG');
    FCLOSE(V1);
END;
/

위의 저장 프로시저를 수행한 후 파일 내용은 다음과 같다.

$ cat a.txt
1-ABCDEFG
2-ABCDEFG
3-ABCDEFG
4-ABCDEFG
5-ABCDEFG
6-ABCDEFG
7-ABCDEFG
8-ABCDEFG
9-ABCDEFG
10-ABCDEFG

파일 제어 예외 처리#

저장 프로시저 또는 함수 실행 중에 발생할 수 있는 파일 제어 관련 예외를 처리할 때 명심해야 할 몇 가지 주의 사항을 설명한다.

파일 제어 관련 내장 프로시저와 함수 실행 중 발생 가능한 예외는 다음 표와 같다. 이들 예외는 다른 시스템 정의 예외처럼 exception handler에서 처리할 수 있다.

예외 이름 설명
INVALID_PATH 해당 디렉토리 객체가 존재하지 않음 (즉 명시한 객체는 CREATE DIRECTORY문으로 만들어진 디렉토리 객체가 아님)
INVALID_MODE 파일 열기 모드의 값이 유효하지 않음 (r, w, a 중 하나를 지정해야 함)
INVALID_FILEHANDLE 파일 핸들이 유효하지 않음 (파일이 열린 상태가 아님)
INVALID_OPERATION 실제 디렉토리 및 파일이 파일 시스템 상에 존재하지 않거나 파일 시스템에 의해 접근이 거부됨
READ_ERROR 열기에 성공한 파일이 READ 시 존재하지 않거나, 파일 시스템에 의해 파일이 접근 거부됨
WRITE_ERROR 열기에 성공한 파일이 WRITE 시 존재하지 않거나, 파일 시스템에 의해 파일이 접근 거부되거나, 쓰기 모드로 연 파일이 아닌 경우
ACCESS_DENIED 디렉토리 객체에 대한 접근이 거부됨 (GRANT문으로 사용자에게 객체 접근 권한을 부여 해야 함)
DELETE_FAILED 삭제할 파일이 존재하지 않거나, 파일 시스템에 의해 파일 접근이 거부된 경우
RENAME_FAILED overwrite옵션을 주지 않았는데 이미 바꿀 파일이 존재하거나, 기타 운영 체제 에러가 발생한 경우

예제#

예제1#

다음은 디렉토리와 파일 이름을 입력으로 받아 파일을 열어 파일의 내용을 조회하는 프로시저다. 이 때, 디렉토리 또는 파일 이름이 잘못 지정되거나 데이터가 존재하지 않는 빈 파일이 지정될 수도 있다. 그러므로 이 저장 프로시저는 INVALID_PATH 및 NO_DATA_FOUND 예외를 처리할 수 있는 exception handler를 포함하고 있다.

--# CREATE VERIFY PROCEDURE
CREATE OR REPLACE PROCEDURE PROC2( PATH VARCHAR(40), FILE VARCHAR(40) )
AS
   V1 FILE_TYPE;
   V2 VARCHAR(100);
BEGIN
   V1 := FOPEN( PATH, FILE, 'r' );
   LOOP
       GET_LINE( V1, V2, 100 );
       PRINT( V2 );
   END LOOP;
EXCEPTION
   WHEN INVALID_PATH THEN
       PRINTLN('CANNOT OPEN FILE.');
   WHEN NO_DATA_FOUND THEN
       PRINTLN('NO DATA FOUND.');
       FCLOSE( V1 );
END;
/

예제2#

다음 예제는 테이블의 데이터를 파일로 쓰거나 파일에서 읽는 방법을 보여준다.

사용자를 생성하고 그 사용자에게 적절한 권한을 부여한다.

CONNECT SYS/MANAGER;
CREATE USER MHJEONG IDENTIFIED BY MHJEONG;
GRANT CREATE ANY DIRECTORY TO MHJEONG;
GRANT DROP ANY DIRECTORY TO MHJEONG;

테이블을 생성하고 데이터를 입력한 후, 디렉토리 객체를 생성한다.

CONNECT MHJEONG/MHJEONG;
CREATE TABLE T1( ID INTEGER, NAME VARCHAR(40) );
INSERT INTO T1 VALUES( 1, 'JAKIM' );
INSERT INTO T1 VALUES( 2, 'PEH' );
INSERT INTO T1 VALUES( 3, 'KUMDORY' );
INSERT INTO T1 VALUES( 4, 'KHSHIM' );
INSERT INTO T1 VALUES( 5, 'LEEKMO' );
INSERT INTO T1 VALUES( 6, 'MHJEONG' );
CREATE DIRECTORY MYDIR AS '/home1/mhjeong';

T1테이블의 모든 레코드를 읽어서, 그 데이터를 t1.txt파일에 쓰는 저장 프로시저를 생성한다.

CREATE OR REPLACE PROCEDURE WRITE_T1
AS
  V1 FILE_TYPE;
  ID INTEGER;
  NAME VARCHAR(40);
BEGIN
  DECLARE
    CURSOR T1_CUR IS
    SELECT * FROM T1;
  BEGIN
    OPEN T1_CUR;
    V1 := FOPEN( 'MYDIR', 't1.txt', 'w' );
    LOOP
      FETCH T1_CUR INTO ID, NAME;
      EXIT WHEN T1_CUR%NOTFOUND;
      PUT_LINE( V1, 'ID : '||ID||' NAME : '||NAME);
    END LOOP;
    CLOSE T1_CUR;
    FCLOSE(V1);
  END;
END;
/

파일 t1.txt의 내용을 읽어서 화면에 출력하는 저장 프로시저를 생성한다.

CREATE OR REPLACE PROCEDURE READ_T1
AS
  BUFFER VARCHAR(200);
  V1 FILE_TYPE;
BEGIN
  V1 := FOPEN( 'MYDIR', 't1.txt', 'r' );
  LOOP
    GET_LINE( V1, BUFFER, 200 );
    PRINT( BUFFER );
  END LOOP;
  FCLOSE( V1 );
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    FCLOSE( V1 );
END;
/

실행 결과#

위에서 생성한 저장 프로시저를 실행하면, 다음의 결과가 출력된다.

iSQL> exec write_t1;
EXECUTE success.
iSQL> exec read_t1;
ID : 1 NAME : JAKIM
ID : 2 NAME : PEH
ID : 3 NAME : KUMDORY
ID : 4 NAME : KHSHIM
ID : 5 NAME : LEEKMO
ID : 6 NAME : MHJEONG
EXECUTE success.

파일 시스템의 해당 디렉토리에 다음의 파일이 있을 것이다.

$ cd /home1/mhjeong
$ cat t1.txt
ID : 1 NAME : JAKIM
ID : 2 NAME : PEH
ID : 3 NAME : KUMDORY
ID : 4 NAME : KHSHIM
ID : 5 NAME : LEEKMO
ID : 6 NAME : MHJEONG

TCP 접속 제어#

TCP 접속 제어#

데이타 타입#

저장 프로시저에서 TCP 접속을 제어하기 위해서 CONNECT_TYPE이라는 데이터 타입을 지원한다.

CONNECT_TYPE은 내부적으로 TCP 소켓 관련 정보를 저장하고 있으나, 사용자가 내부 데이터에는 접근할 수 없다.

CONNECT_TYPE의 함수#

저장 프로시저 내에서 CONNECT_TYPE의 지역 변수들은 아래 함수의 인자 또는 반환 값으로 사용될 수 있다.

함수명 설명
CLOSEALL_CONNECT 세션에 연결된 모든 접속 핸들을 닫는다.
CLOSE_CONNECT 세션에 연결된 접속 핸들을 닫는다.
IS_CONNECTED CONNECT_TYPE의 접속 핸들이 연결된 상태를 확인한다.
OPEN_CONNECT 읽기 또는 쓰기의 목적으로 파일을 연다.
WRITE_RAW RAW(VARBYTE) 타입의 자료를 접속된 핸들을 통해 네트워크에 전송한다.
CHECK_CONNECT_STATE 현재 연결의 상태와 변경하기 원하는 상태를 비교하여, 상태변이가 가능한지 검사한다.
CHECK_CONNECT_REPLY 접속 핸들의 프로토콜에 적합하게 응답 메시지를 검사한다.
SEND_TEXT VARCHAR 타입의 데이터를 원격 서버에 전송한다.
RECV_TEXT 원격 서버에서 VARCHAR 타입의 데이터를 수신한다.
WRITE_RAW_VALUE RAW 타입의 VALUE 데이터를 원격 서버에 전송한다.

TCP 접속 제어 연결 상태#

연결 상태 식별값
NO CONNECT 0
CONNECTED 1
SMTP HELO 2
SMTP MAIL 3
SMTP RCPT 4
SMTP OPEN 5
SMTP DATA 6
SMTP CRLF 7

TCP 접속 제어 프로토콜 타입#

프로토콜 타입 식별값
SMTP 1

CLOSEALL_CONNECT#

현재 세션에 연결되어 있는 모든 접속 핸들을 닫는 저장 함수이다.

구문#

CONNECT_TYPE variable :=
CLOSEALL_CONNECT();

결과값#

성공적으로 수행하면 0을 반환한다.

예외#

이 함수는 예외를 발생시키지 않는다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 INTEGER;
BEGIN
    V1 := CLOSEALL_CONNECT();
END;
/

CLOSE_CONNECT#

현재 세션에 연결되어 있는 접속 핸들을 닫는 저장 함수이다.

구문#

CONNECT_TYPE variable :=
CLOSE_CONNECT(
         coon IN CONNECT_TYPE);

파라미터#

이름 입출력 데이터 타입 설명
coon IN CONNECT_TYPE 접속 핸들

결과값#

성공적으로 수행하면 0을 반환한다.

예외#

이 함수는 예외를 발생시키지 않는다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
BEGIN
    V1 := OPEN_CONNECT('127.0.0.1', 22007, 1000, 3000);
    V2 := WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
    V2 := CLOSE_CONNECT(V1);
END;
/

IS_CONNECTED#

CONNECT_TYPE 접속 핸들의 연결 상태를 확인하는 함수이다.

구문#

CONNECT_TYPE variable :=
IS_CONNECTED(
         coon IN CONNECT_TYPE);

파라미터#

이름 입출력 데이터 타입 설명
coon IN CONNECT_TYPE 접속 핸들

결과값#

접속 핸들이 연결 상태이면 0을 반환하고, 연결되지 않았다면 -1을 반환한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
    AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
BEGIN
    V1 := OPEN_CONNECT('127.0.0.1', 22007, 1000, 3000);
    V2 := IS_CONNECTED(V1);
    IF V2 = 0 THEN
        PRINTLN('CONNECTD');
        V2 := WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
        V2 := CLOSE_CONNECT(V1);
    ELSE
        PRINTLN('NOT CONNECTD');
    END IF;
END;
/

OPEN_CONNECT#

TCP 소켓을 생성하고, 입력한 IP와 PORT로 원격 서버에 접속하는 기능을 제공하는 저장 함수이다.

구문#

CONNECT_TYPE variable :=
OPEN_CONNECT(
         ip IN VARCHAR(64),
         port IN INTEGER,
         connect_timeout IN INTEGER,
         tx_buffersize IN INTEGER);

파라미터#

이름 입출력 데이터 타입 설명
ip IN VARCHAR(64) 원격 서버의 IP 주소
port IN INTEGER 원격 서버의 PORT 번호
connect_timeout IN INTEGER 접속을 허용하는 시간(마이크로초).
0 또는 Null을 입력하면 접속될 때까지 대기한다.
tx_buffersize IN INTEGER 송신 버퍼의 크기를 설정한다.
2048~32767 바이트까지 설정할 수 있으며, Null 또는 2048 이하의 값은 2048 바이트로 설정된다.

결과값#

성공적으로 수행할 경우 데이터 타입이 CONNECT_TYPE인 접속 핸들을 반환한다.

예외#

접속 핸들이 정상적으로 네트워크에 정상적으로 연결되지 않았다면, CONNECT_TYPE은 NULL값을 반환한다. IS_CONNECTED() 함수를 이용하여 반환된 CONNECT_TYPE의 값으로 접속 여부를 확인할 수 있다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
BEGIN
    V1 := OPEN_CONNECT('127.0.0.1', 22007, 1000, 3000);
    V2 := WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
    V2 := CLOSE_CONNECT(V1);
END;
/

WRITE_RAW#

RAW(VARBYTE) 타입의 자료를 접속된 핸들을 통해 네트워크에 전송하는 함수이다.

구문#

CONNECT_TYPE variable :=
WRITE_RAW (
         coon IN CONNECT_TYPE,
         data IN VARBYTE,
         length IN INTEGER );

파라미터#

이름 입출력 데이터 타입 설명
coon IN CONNECT_TYPE 접속 핸들
data IN VARBYTE 전송될 데이터
length IN INTEGER 전송될 데이터의 길이

결과값#

성공적으로 수행할 경우 네트워크에 전송된 데이터의 길이를 반환한다.

예외#

수행시 오류가 발생하면 -1을 반환한다.

만약 접속 핸들이 유실되었다면 IS_CONNECTED() 함수를 확인하여 결과값이 -1이 반환되어 확인할 수 있다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
BEGIN
    V1 := OPEN_CONNECT('127.0.0.1', 22007, 1000, 3000);
    V2 := WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
    V2 := CLOSE_CONNECT(V1);
END;

CHECK_CONNECT_STATE#

현재 연결의 상태와 변경하기 원하는 상태를 비교하여, 상태변이가 가능한지 검사한다.

구문#

INTEGER variable :=
CHECK_CONNECT_STATE(
  c IN CONNECT_TYPE,
  next_state IN INTEGER );

파라미터#

이름 입출력 데이터 타입 설명
c IN CONNECT_TYPE 원격 서버의 접속 핸들
next_state IN INTEGER 변경하기 원하는 상태의 값

결과값#

성공적으로 수행하면 0을 반환한다.

예외#

현재 연결 상태에서 원하는 상태로 변경을 지원하지 않을 때, UNSUPPORTED_STATE 예외가 발생한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
BEGIN
    V1 := OPEN_CONNECT( '127.0.0.1', 25, null, null );
    V2 := CHECK_CONNECT_STATE( V1, 1 ); --# 1은 Connected 상태
    V2 := CLOSE_CONNECT( V1 );
END;
/

CHECK_CONNECT_REPLY#

현재 연결의 프로토콜에 적합한 응답 결과인지 검사한다.

구문#

INTEGER variable :=
CHECK_CONNECT_REPLY(
  protocol_type IN INTEGER,
  reply IN VARCHAR(65534) );

파라미터#

이름 입출력 데이터 타입 설명
protocol_type IN INTEGER 프로토콜 타입
reply IN VARCHAR(65534) 응답받은 메세지

결과값#

성공적으로 수행하면 0을 반환한다.

예외#

지원하지 않는 프로토콜 타입을 사용하거나 응답의 내용이 에러인 경우 SMTP_REPLY_ERROR 예외가 발생한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
    V3 VARCHAR(65534);
BEGIN
    V1 := OPEN_CONNECT( '127.0.0.1', 25, null, null );
    V2 := CHECK_CONNECT_STATE( V1, 1 ); --# 1은 Connected 상태
    IF ( V2 > 0 ) THEN
        V3 := RECV_TEXT( V1, 100 );
        V2 := CHECK_CONNECT_REPLY( 1, V3 ); --# 1은 SMTP
    END IF;
END;
/

SEND_TEXT#

VARCHAR 타입의 자료를 접속된 핸들을 통해 네트워크에 전송하는 함수이다.

구문#

INTEGER variable :=
SEND_TEXT(
  c IN CONNECT_TYPE,
  data IN VARCHAR(65534),
  length IN INTEGER );

파라미터#

이름 입출력 데이터 타입 설명
c IN CONNECT_TYPE 원격 서버의 접속 핸들
data IN VARCHAR(65534) 전송할 데이터
length IN INTEGER 전송할 데이터의 길이

결과값#

성공적으로 수행할 경우, 네크워크로 전송된 데이터의 길이를 반환한다.

예외#

수행시 오류가 발생하면 -1을 반환한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
BEGIN
    V1 := OPEN_CONNECT( '127.0.0.1', 25, null, null );
    V2 := SEND_TEXT( V1, 'HELO 127.0.0.1' || CHR( 13 ) || CHR( 10 ), 16 );
    V2 := CLOSE_CONNECT( V1 );
END;
/

RECV_TEXT#

접속된 핸들을 통해 네트워크로 VARCHAR 타입의 자료를 전송받는 함수이다.

구문#

VARCHAR variable :=
RECV_TEXT(
  c IN CONNECT_TYPE,
  length IN INTEGER );

파라미터#

이름 입출력 데이터 타입 설명
c IN CONNECT_TYPE 원격 서버의 접속 핸들
length IN INTEGER 전송받을 응답 데이터의 길이

결과값#

성공적으로 수행할 경우, 네크워크로 받은 VARCHAR 데이터를 반환한다.

예외#

수행시 오류가 발생하면 null 를 반환한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
    V3 VARCHAR(65534);
BEGIN
    V1 := OPEN_CONNECT( '127.0.0.1', 25, null, null );
    V2 := SEND_TEXT( V1, 'HELO 127.0.0.1'  || CHR( 13 ) || CHR( 10 ), 16 );
    V3 := RECV_TEXT( V1, 100 );
    V2 := CLOSE_CONNECT( V1 );
END;
/

WRITE_RAW_VALUE#

RAW 타입의 VALUE 데이터를 접속된 핸들을 통해 네트워크에 전송하는 함수이다.

구문#

INTEGER variable :=
WRITE_RAW_VALUE(
  c IN CONNECT_TYPE,
  data IN RAW(65534),
  length IN INTEGER );

파라미터#

이름 입출력 데이터 타입 설명
c IN CONNECT_TYPE 원격 서버의 접속 핸들
data IN RAW(65534) 전송할 데이터
length IN INTEGER 전송할 데이터의 길이

결과값#

성공적으로 수행할 경우, 네크워크로 전송된 데이터의 길이를 반환한다.

예외#

수행시 오류가 발생하면 -1을 반환한다.

예제#

CREATE OR REPLACE PROCEDURE PROC1
AS
    V1 CONNECT_TYPE;
    V2 INTEGER;
    V3 VARCHAR(65534);
BEGIN
    V1 := OPEN_CONNECT( '127.0.0.1', 25, null, null );
    V2 := WRITE_RAW_VALUE( V1, TO_RAW( 'HELO 127.0.0.1'  || CHR( 13 ) || CHR( 10 ) ), 16 );
    V2 := CLOSE_CONNECT( V1 );
END;
/

DBMS Stats#

DBMS Stats 은 Altibase 데이터베이스의 통계 자료를 수집, 변경(설정), 삭제하는 기능이다. 이 기능은 시스템 저장 프로시저 형태로 제공된다.

개요#

데이터베이스 내의 객체들에 대한 통계 자료는 쿼리 옵티마이저가 최적화된 실행 계획을 만들기 위해 사용한다. DBMS Stats 저장 프로시저를 이용해서 이 통계 자료를 구축하고 갱신할 수 있으며, 개별의 칼럼, 인덱스, 테이블 또는 시스템 별로 통계 자료를 설정하거나 삭제할 수 있다.

DBMS Stats 프로시저#

Altibase는 통계 자료 수집을 위해 다음과 같은 시스템 저장 프로시저를 제공한다. 이 저장 프로시저를 사용해서 통계 자료를 수집하고 실행 계획을 재구축할 수 있다.

이름 설명
GATHER_SYSTEM_STATS 데이터베이스 시스템에 대한 통계 자료를 수집한다.
GATHER_DATABASE_STATS 모든 테이블에 대한 통계 자료를 수집한다.
GATHER_TABLE_STATS 특정 테이블에 대한 통계 자료를 수집한다.
GATHER_INDEX_STATS 특정 인덱스에 대한 통계 자료를 수집한다.

아래는 개별적인 칼럼, 인덱스, 테이블 또는 시스템 관련 통계 자료를 변경하는 저장 프로시저이다.

이름 설명
SET_SYSTEM_STATS 데이터베이스 시스템에 대한 통계 자료를 변경한다.
SET_TABLE_STATS 특정 테이블에 대한 통계 자료를 변경한다.
SET_INDEX_STATS 특정 인덱스에 대한 통계 자료를 변경한다.
SET_COLUMN_STATS 특정 테이블의 칼럼에 대한 통계 자료를 변경한다.

아래는 개별적인 칼럼, 인덱스, 테이블 또는 시스템 관련 통계 자료를 조회하는 저장 프로시저이다.

이름 설명
GET_SYSTEM_STATS 데이터베이스 시스템에 대한 통계 자료를 조회한다.
GET_TABLE_STATS 특정 테이블에 대한 통계 자료를 조회한다.
GET_INDEX_STATS 특정 인덱스에 대한 통계 자료를 조회한다.
GET_COLUMN_STATS 특정 테이블의 칼럼에 대한 통계 자료를 조회한다.

아래는 개별적인 칼럼, 인덱스, 테이블 또는 시스템 관련 통계 자료를 복사 및 삭제하는 저장 프로시저이다.

이름 설명
COPY_TABLE_STATS 통계 정보를 새로운 파티션에 복사한다.
DELETE_SYSTEM_STATS 데이터베이스 시스템에 대한 통계 자료를 삭제한다.
DELETE_DATABASE_STATS 모든 테이블에 대한 통계 자료를 삭제한다.
DELETE_TABLE_STATS 특정 테이블에 대한 통계 자료를 삭제한다.
DELETE_INDEX_STATS 특정 인덱스에 대한 통계 자료를 삭제한다.
DELETE_COLUMN_STATS 특정 테이블의 칼럼에 대한 통계 자료를 삭제한다.

주의사항#

  • 통계 자료 수집 시 Altibase 서버에 부하가 가중될 수 있다.

  • 통계 자료는 그 근사치를 수집한다.

  • 통계 자료 수집 후 통계 자료를 수집한 대상 객체와 관련된 모든 쿼리의 실행 계획을 재구축하게 된다. 이때 Altibase 서버의 성능이 다소 떨어질 수 있다.

COPY_TABLE_STATS#

원본 파티션의 통계 정보를 새로운 파티션으로 복사한다. 원본 파티션의 통계 정보가 없는 경우에는 복사하지 않는다.

구문#

COPY_TABLE_STATS(
  ownname IN VARCHAR(128),
  tabname IN VARCHAR(128),
  srcpartname IN VARCHAR(128),
  dstpartname IN VARCHAR(128));

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 원본 및 대상 파티션의 테이블 소유자의 이름
tabname IN VARCHAR(128) 원본 파티션의 테이블 이름 및 대상 파티션의 테이블 이름
srcpartname IN VARCHAR(128) 원본 파티션의 이름
dstpartname IN VARCHAR(128) 대상 파티션의 이름

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC COPY_TABLE_STATS('SYS','T1','P3','P4');
Execute success.

GATHER_DATABASE_STATS#

이 프로시저는 데이터베이스에 존재하는 모든 테이블에 대한 통계 자료를 수집한다.

구문#

GATHER_DATABASE_STATS (
  estimate_percent   FLOAT   DEFAULT 0,
  degree                INTEGER DEFAULT 0,
  gather_system_stats BOOLEAN DEFAULT FALSE,
  no_invalidate       BOOLEAN DEFAULT FALSE);

파라미터#

이름 입출력 데이터 타입 설명
estimate_percent IN FLOAT 통계치를 추정하기 위해 수집할 샘플링 데이터의 양을 수집 대상 전체의 데이터 양으로 나눈 비율.
0 ~ 1.0의 값을 지정할 수 있다. 입력하지 않거나, NULL을 입력할 경우, 각 수집 대상의 크기에 따라 자동으로 설정된다.
degree IN INTEGER 통계 자료 수집을 병렬로 수행할 쓰레드의 수.
입력하지 않을 경우, 기본값은 0이다.
gather_system_stats IN BOOLEAN 데이터베이스 시스템에 대한 통계 자료 수집을 같이 할 것인지 여부이다.
기본값은 FALSE이며, 이 경우 사용자는 GATHER_SYSTEM_STATS 나 SET_SYSTEM_STATS를 실행하여 시스템 통계 자료를 수집하거나 설정하여야 한다.
no_invalidate IN BOOLEAN 통계 자료를 수집한 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다.
실행 계획을 재구축하지 않으려면 TRUE를 입력한다. 입력하지 않을 경우의 기본값은 FALSE로, 실행 계획을 재구축 한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GATHER_DATABASE_STATS();
SYSTEM_.SYS_TABLES_
SYSTEM_.SYS_COLUMNS_
SYSTEM_.SYS_DATABASE_
SYSTEM_.SYS_USERS_
.
.
.
Execute success.

GATHER_INDEX_STATS#

특정 인덱스에 대한 통계 자료를 수집한다.

구문#

GATHER_INDEX_STATS (
  ownname             VARCHAR(128),
  idxname             VARCHAR(128),
  estimate_percent    FLOAT   DEFAULT 0,
  degree              INTEGER DEFAULT 0,
  no_invalidate       BOOLEAN DEFAULT FALSE);

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 인덱스 소유자의 이름
idxname IN VARCHAR(128) 통계 자료를 수집할 인덱스의 이름
estimate_percent IN FLOAT 통계치를 추정하기 위해 수집할 샘플링 데이터의 양을 수집 대상 전체의 데이터 양으로 나눈 비율.
0 ~ 1.0의 값을 지정할 수 있다. 입력하지 않거나, NULL을 입력할 경우, 각 수집 대상의 크기에 따라 자동으로 설정된다.
degree IN INTEGER 통계 자료 수집을 병렬로 수행할 쓰레드의 수.
입력하지 않을 경우, 기본값은 0이다.
no_invalidate IN BOOLEAN 통계 자료를 수집한 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다.
실행 계획을 재구축하지 않으려면 TRUE를 입력한다. 입력하지 않을 경우의 기본값은 FALSE로, 실행 계획을 재구축 한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GATHER_INDEX_STATS( 'SYS','T1_IDX');
Execute success.

GATHER_SYSTEM_STATS#

이 프로시저는 데이터베이스 시스템에 대한 통계 자료를 수집한다. 이 저장 프로시저는 SYS 사용자만이 수행할 수 있다.

구문#

GATHER_SYSTEM_STATS ( );

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GATHER_SYSTEM_STATS();
Execute success.

GATHER_TABLE_STATS#

이 프로시저는 특정 테이블과 그 테이블에 정의된 인덱스들에 대한 통계 자료를 수집한다.

구문#

GATHER_TABLE_STATS (
  ownname              VARCHAR(128),
  tabname              VARCHAR(128),
  partname             VARCHAR(128) DEFAULT NULL,
  estimate_percent     FLOAT   DEFAULT 0,
  degree               INTEGER DEFAULT 0,
  no_invalidate        BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 수집할 테이블의 이름
partname IN VARCHAR(128) 테이블의 파티션 이름. 파티션을 지정하면, 그 파티션에 대한 통계 자료만 수집한다.
입력하지 않을 경우의 기본값은 NULL이며, 지정한 테이블의 모든 파티션에 대한 통계 자료를 수집한다.
estimate_percent IN FLOAT 통계치를 추정하기 위해 수집할 샘플링 데이터의 양을 수집 대상 전체의 데이터 양으로 나눈 비율.
0 ~ 1.0의 값을 지정할 수 있다. 입력하지 않거나, NULL을 입력할 경우, 각 수집 대상의 크기에 따라 자동으로 설정된다.
degree IN INTEGER 통계 자료 수집을 병렬로 수행할 쓰레드의 수.
입력하지 않을 경우, 기본값은 0이다.
no_invalidate IN BOOLEAN 통계 자료를 수집한 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다.
실행 계획을 재구축하지 않으려면 TRUE를 입력한다. 입력하지 않을 경우의 기본값은 FALSE로, 실행 계획을 재구축 한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GATHER_TABLE_STATS( 'SYS','T1');
Execute success.

SET_COLUMN_STATS#

이 프로시저는 테이블의 칼럼에 대한 통계 자료를 변경한다.

구문#

SET_COLUMN_STATS (
  ownname          VARCHAR(128),
  tabname          VARCHAR(128),
  colname          VARCHAR(128),
  partname         VARCHAR(128) DEFAULT NULL,
  numdist          BIGINT  DEFAULT NULL,
  numnull          BIGINT  DEFAULT NULL,
  avgclen          BIGINT  DEFAULT NULL,
  minvalue         VARCHAR(48) DEFAULT NULL,
  maxvalue         VARCHAR(48) DEFAULT NULL,
  no_invalidate    BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 변경할 테이블의 이름
colname IN VARCHAR(128) 통계 자료를 변경할 칼럼의 이름
partname IN VARCHAR(128) 테이블의 파티션 이름. 파티션을 지정하면 해당 파티션에 대한 통계 자료만 변경한다.
기본값은 NULL이며, 테이블의 모든 파티션에 대한 통계 자료를 변경한다.
numdist IN BIGINT 칼럼에서 고유한 값의 개수
numnull IN BIGINT 칼럼에서 NULL의 개수
avgclen IN BIGINT 칼럼의 평균 길이
minvalue IN VARCHAR(48) 칼럼의 최소값. DATE 타입은 반드시 "YYYY-MM-DD HH:MI:SS" 형식으로 입력한다.
maxvalue IN VARCHAR(48) 칼럼의 최대값. DATE 타입은 반드시 "YYYY-MM-DD HH:MI:SS" 형식으로 입력한다.
no_invalidate IN BOOLEAN 통계 자료가 수집된 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부.
기본값은 FALSE이며, 실행 계획을 재구축한다. 만약 재구축하지 않으려면, TRUE를 입력한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC SET_COLUMN_STATS('SYS', 'T1', 'I1', NULL, 1000);
Execute success.

SET_INDEX_STATS#

이 프로시저는 인덱스에 대한 통계 자료를 변경한다.

구문#

SET_INDEX_STATS (
  ownname           VARCHAR(128),
  index             VARCHAR(128),
  keycnt            BIGINT DEFAULT NULL,
  numpage           BIGINT DEFAULT NULL,
  numdist           BIGINT DEFAULT NULL,
  clusfct           BIGINT DEFAULT NULL,
  idxheight         BIGINT DEFAULT NULL,
  avgslotcnt        BIGINT DEFAULT NULL,
  no_invalidate     BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 인덱스 소유자의 이름
index IN VARCHAR(128) 통계 자료를 변경할 인덱스의 이름
keycnt IN BIGINT 인덱스의 레코드 개수
numpage IN BIGINT 인덱스의 페이지 개수
numdist IN BIGINT 인덱스에서 고유한 키의 개수
clusfct IN BIGINT 인덱스에 부합하게 데이터가 정렬되어 있는 정도
idxheight IN BIGINT 인덱스의 루트에서 리프 노드까지의 깊이
avgslotcnt IN BIGINT 인덱스 리프 노드에 저장된 레코드의 평균 개수
no_invalidate IN BOOLEAN 통계 자료가 수집된 인덱스들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부. 기본값은 FALSE이며, 실행 계획을 재구축한다. 만약 재구축하지 않으려면, TRUE를 입력한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC SET_INDEX_STATS('SYS', 'IDX1', 1000);
Execute success.

SET_SYSTEM_STATS#

이 프로시저는 데이터베이스 시스템에 대한 통계 자료를 변경한다. 이 저장 프로시저는 SYS 사용자만이 수행할 수 있다.

구문#

SET_SYSTEM_STATS (
  statname            VARCHAR(100),
  statvalue           DOUBLE);

파라미터#

이름 입출력 데이터 타입 설명
statname IN VARCHAR(100) 변경할 시스템 통계 정보의 이름이다. 아래의 값 중에서 하나를 입력해야 한다.
SREAD_TIME: 하나의 페이지를 읽는 평균 소요 시간
MREAD_TIME: 여러 페이지를 읽는 평균 소요 시간
MREAD_PAGE_COUNT: 한번에 읽어 온 페이지 개수
HASH_TIME : 평균 해시 수행 시간
COMPARE_TIME: 평균 비교 수행 시간
STORE_TIME: 평균 메모리 임시 테이블 저장 수행 시간
statvalue IN DOUBLE 시스템 통계 정보의 값

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC SET_SYSTEM_STATS('SREAD_TIME', 100);
Execute success.

SET_TABLE_STATS#

이 프로시저는 테이블에 대한 통계 자료를 변경한다.

구문#

SET_TABLE_STATS (
  ownname         VARCHAR(128),
  tabname         VARCHAR(128),
  partname        VARCHAR(128) DEFAULT NULL,
  numrow          BIGINT  DEFAULT NULL,
  numblk          BIGINT  DEFAULT NULL,
  avgrlen         BIGINT  DEFAULT NULL,
  onerowreadtime  DOUBLE  DEFAULT NULL,
  no_invalidate   BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 변경할 테이블의 이름
partname IN VARCHAR(128) 테이블의 파티션 이름.
파티션을 지정하면 해당 파티션에 대한 통계 자료만 변경된다. 입력하지 않을 경우 기본값은 NULL이며, 지정한 테이블의 모든 파티션에 대한 통계 자료가 변경된다.
numrow IN BIGINT 테이블의 레코드 개수
numblk IN BIGINT 테이블의 페이지 개수
avgrlen IN BIGINT 테이블의 레코드 평균 길이
onerowreadtime IN DOUBLE 테이블의 레코드를 읽는 시간
no_invalidate IN BOOLEAN 통계 자료가 수집된 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부.
기본값은 FALSE이며, 실행 계획을 재구축한다. 만약 재구축하지 않으려면, TRUE를 입력한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC SET_TABLE_STATS('SYS', 'T1', NULL, 1000);
Execute success.

GET_COLUMN_STATS#

이 프로시저는 테이블의 칼럼에 대한 통계 자료를 조회한다.

구문#

GET_COLUMN_STATS (
  ownname          VARCHAR(128),
  tabname          VARCHAR(128),
  colname          VARCHAR(128),
  partname         VARCHAR(128) DEFAULT NULL,
  numdist          BIGINT,
  numnull          BIGINT,
  avgrlen          BIGINT,
  minvalue         VARCHAR(48),
  maxvalue         VARCHAR(48) );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 조회할 테이블의 이름
colname IN VARCHAR(128) 통계 자료를 조회할 칼럼의 이름
partname IN VARCHAR(128) 테이블의 파티션 이름.
파티션을 지정하면 해당 파티션에 대한 통계 자료만 조회한다. 기본값은 NULL이다.
numdist OUT BIGINT 칼럼에서 고유한 값의 개수.
수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
numnull OUT BIGINT 칼럼에서 NULL의 개수.
수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
avgrlen OUT BIGINT 칼럼의 평균 길이.
수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
minvalue OUT VARCHAR(48) 칼럼의 최소값.
수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
maxvalue OUT VARCHAR(48) 칼럼의 최대값.
수집된 통계 정보가 없는 경우 NULL 값이 반환된다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GET_COLUMN_STATS('SYS', 'T1', 'I1', NULL, :v1,:v2,:v3,:v4,:v5);
Execute success.

GET_INDEX_STATS#

이 프로시저는 인덱스에 대한 통계 자료를 조회한다.

구문#

GET_INDEX_STATS (
  ownname          VARCHAR(128),
  index            VARCHAR(128),
  partname         VARCHAR(128) DEFAULT NULL,
  keycnt           BIGINT,
  numpage          BIGINT,
  numdist          BIGINT,
  clstfct          BIGINT,
  idxheight        BIGINT,
  cachedpage       BIGINT,
  avgslotcnt       BIGINT );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 인덱스 소유자의 이름
index IN VARCHAR(128) 통계 자료를 조회할 인덱스의 이름
partname IN VARCHAR(128) 테이블의 파티션 이름. 파티션을 지정하면, 그 파티션에 대한 통계 자료만 수집한다.
입력하지 않을 경우의 기본값은 NULL이다.
keycnt OUT BIGINT 인덱스의 레코드 개수.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.
numpage OUT BIGINT 인덱스의 페이지 개수.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.
numdist OUT BIGINT 인덱스에서 고유한 키의 개수.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.
clstfct OUT BIGINT 인덱스에 부합하게 데이터가 정렬되어 있는 정도.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.
idxheight OUT BIGINT 인덱스의 루트에서 리프 노드까지의 깊이.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.
cachedpage OUT BIGINT 데이터베이스 버퍼에 캐쉬된 페이지의 개수.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.
avgslotcnt OUT BIGINT 인덱스 리프 노드에 저장된 레코드의 평균 개수.
수집된 통계 정보가 없는 경우에는 NULL 값을 반환한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GET_INDEX_STATS('SYS', 'IDX1' null,:v1,:v2,:v3,:v4,:v5,:v6,:v7);
Execute success.

GET_SYSTEM_STATS#

이 프로시저는 데이터베이스 시스템에 대한 통계 자료를 조회한다.

구문#

GET_SYSTEM_STATS (
  statname            VARCHAR(100),
  statvalue           DOUBLE);

파라미터#

이름 입출력 데이터 타입 설명
statname IN VARCHAR(100) 조회할 시스템 통계 정보의 이름이다. 아래의 값 중에서 하나를 입력해야 한다.
SREAD_TIME: 하나의 페이지를 읽는 평균 소요 시간
MREAD_TIME: 여러 페이지를 읽는 평균 소요 시간
MREAD_PAGE_COUNT: 한번에 읽어 온 페이지 개수
HASH_TIME : 평균 해시 수행 시간
COMPARE_TIME : 평균 비교 수행 시간
STORE_TIME: 평균 메모리 임시 테이블 저장 수행 시간
statvalue IN DOUBLE 시스템 통계 정보의 값.
수집된 통계 정보가 없을 경우에는 NULL 값을 반환한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GET_SYSTEM_STATS('SREAD_TIME', :v1);
Execute success.

GET_TABLE_STATS#

이 프로시저는 테이블에 대한 통계 자료를 조회한다.

구문#

GET_TABLE_STATS (
ownname          VARCHAR(128),
tabname          VARCHAR(128),
partname         VARCHAR(128) DEFAULT NULL,
numrow            BIGINT,
numpage           BIGINT,
avgrlen           BIGINT,
cashedpage       BIGINT,
onerowreadtime   DOUBLE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 조회할 테이블의 이름
partname IN VARCHAR(128) 테이블의 파티션 이름. 파티션을 지정하면 해당 파티션에 대한 통계 자료만 조회된다. 입력하지 않을 경우 기본값은 NULL이다.
numrow OUT BIGINT 테이블의 레코드 개수 수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
numpage OUT BIGINT 테이블의 페이지 개수 수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
avgrlen OUT BIGINT 테이블의 레코드 평균 길이 수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
cashedpage OUT BIGINT 데이터베이스 버퍼에 캐쉬된 페이지의 개수 수집된 통계 정보가 없는 경우 NULL 값이 반환된다.
onerowreadtime OUT DOUBLE 테이블의 레코드를 읽는 평균 시간 수집된 통계 정보가 없는 경우 NULL 값이 반환된다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC GET_TABLE_STATS('SYS', 'T1', NULL, :v1,:v2,:v3,:v4,:v5);
Execute success.

DELETE_COLUMN_STATS#

이 프로시저는 테이블의 칼럼에 대한 통계 자료를 삭제한다.

구문#

DELETE_COLUMN_STATS (
ownname          VARCHAR(128),
tabname          VARCHAR(128),
colname          VARCHAR(128),
partname         VARCHAR(128) DEFAULT NULL,
cascade_part    BOOLEAN DEFAULT TRUE,
no_invalidate   BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 삭제할 칼럼이 속해 있는 테이블
colname IN VARCHAR(128) 통계 자료를 삭제할 칼럼의 이름
partname IN VARCHAR(128) 통계 자료를 삭제할 테이블 파티션의 이름. 파티션을 지정하면 cascade_part 값에 상관없이 지정한 파티션의 지정한 칼럼에 대한 통계 자료만 삭제된다. 만약 NULL인 경우, cascade_part 값에 따라 삭제될 칼럼 통계 자료가 결정된다.
cascade_part IN BOOLEAN tabname에 파티션드 테이블을 지정하고, partname이 NULL일 경우 이 값에 따라 삭제될 칼럼 통계 자료가 결정된다. 이 값이 TRUE이면 파티션드 테이블의 전체적인 칼럼 통계 자료 뿐만 아니라 테이블의 모든 파티션에 해당하는 칼럼의 통계 자료도 삭제된다. FALSE를 입력하면 파티션드 테이블의 전체적인 칼럼 통계 자료만 삭제한다. 기본값은 TRUE이다.
no_invalidate IN BOOLEAN 통계 자료가 삭제된 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다. 기본값은 FALSE이며, 실행 계획을 재구축한다. TRUE를 입력하면, 실행계획을 재구축하지 않는다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC DELETE_COLUMN_STATS('SYS', 'T1', 'I1');
Execute success.

DELETE_DATABASE_STATS#

이 프로시저는 데이터베이스에 존재하는 모든 테이블에 대한 통계 자료를 삭제한다.

구문#

DELETE_DATABASE_STATS (
no_invalidate       BOOLEAN DEFAULT FALSE);

파라미터#

이름 입출력 데이터 타입 설명
no_invalidate IN BOOLEAN 통계 자료를 삭제한 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다.
입력하지 않을 경우에 기본값은 FALSE로, 실행 계획을 재구축하지 않는다. TRUE를 입력하면, 실행 계획을 재구축한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC DELETE_DATABASE_STATS();
SYSTEM_.SYS_TABLES_
SYSTEM_.SYS_COLUMNS_
SYSTEM_.SYS_DATABASE_
SYSTEM_.SYS_USERS_
.
.
.
Execute success.

DELETE_INDEX_STATS#

이 프로시저는 특정 인덱스에 대한 통계 자료를 삭제한다.

구문#

DELETE_INDEX_STATS (
ownname              VARCHAR(128),
idxname              VARCHAR(128),
no_invalidate        BOOLEAN DEFAULT FALSE);

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 인덱스 소유자의 이름
idxname IN VARCHAR(128) 통계 자료를 삭제할 인덱스의 이름
no_invalidate IN BOOLEAN 통계 자료를 삭제한 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다.
기본값은 FALSE로, 실행 계획을 재구축한다. 실행 계획을 재구축하지 않으려면 TRUE를 입력한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC DELETE_INDEX_STATS('SYS','T1_IDX');
Execute success.

DELETE_SYSTEM_STATS#

이 프로시저는 데이터베이스 시스템에 대한 통계 자료를 삭제한다. 이 저장 프로시저는 SYS 사용자만이 수행할 수 있다.

구문#

DELETE_SYSTEM_STATS ( );

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC DELETE_SYSTEM_STATS();
Execute success.

DELETE_TABLE_STATS#

이 프로시저는 특정 테이블과 그 테이블에 정의된 칼럼, 인덱스들에 대한 통계 자료를 삭제한다.

구문#

DELETE_TABLE_STATS (
ownname           VARCHAR(128),
tabname           VARCHAR(128),
partname          VARCHAR(128) DEFAULT NULL,
cascade_part      BOOLEAN DEFAULT TRUE,
cascade_column    BOOLEAN DEFAULT TRUE,
cascade_index     BOOLEAN DEFAULT TRUE,
no_invalidate     BOOLEAN DEFAULT FALSE );

파라미터#

이름 입출력 데이터 타입 설명
ownname IN VARCHAR(128) 테이블 소유자의 이름
tabname IN VARCHAR(128) 통계 자료를 삭제할 테이블의 이름
partname IN VARCHAR(128) 통계 자료를 삭제할 테이블 파티션의 이름.
파티션을 지정하면, casdace_part 값에 상관없이 해당 파티션의 통계 자료만 삭제된다.
이 값이 NULL이고 지정한 테이블이 파티션드 테이블인 경우, casdace_part 값에 따라 삭제될 테이블 통계 자료가 결정된다.
cascade_part IN BOOLEAN tabname이 파티션드 테이블이고 partname이 NULL일 경우, 이 값이 TRUE이면 전체적인 테이블 통계 자료 뿐만 아니라 테이블의 모든 파티션의 통계 자료도 삭제된다.
이 값이 FALSE이면 지정한 테이블의 통계 자료만 삭제된다. 기본값은 TRUE이다.
cascade_column IN BOOLEAN 지정한 테이블의 통계 자료 뿐만 아니라, 지정한 테이블에 속한 모든 칼럼의 통계 자료도 삭제할지 여부이다.
기본값은 TRUE이며, 지정한 테이블과 테이블의 모든 칼럼의 통계 자료도 삭제한다.
이 값이 FALSE이면 지정한 테이블의 통계 자료만 삭제한다.
cascade_index IN BOOLEAN 지정한 테이블의 통계 자료 뿐만 아니라, 지정한 테이블에 속한 모든 인덱스의 통계 자료도 삭제할지 여부이다.
기본값은 TRUE이며, 지정한 테이블과 테이블의 모든 인덱스의 통계 자료도 삭제한다. FALSE가 입력되면 지정한 테이블의 통계 자료만 삭제한다.
no_invalidate IN BOOLEAN 통계 자료를 삭제한 테이블들과 관련된 모든 쿼리들의 실행 계획을 재구축할지 여부이다.
기본값은 FALSE로, 실행 계획을 재구축한다. 실행 계획을 재구축하지 않으려면 TRUE를 입력한다.

결과값#

저장 프로시저이므로 결과값을 반환하지 않는다.

예제#

iSQL> EXEC DELETE_TABLE_STATS( 'SYS','T1');
Execute success.

그 외 함수들#

REMOVE_XID#

XA 환경에서 "heuristically completed" 된 (데이터베이스 서버에 의해 임의로 롤백 되거나 커밋 된) 트랜잭션의 XID 정보를 강제로 삭제한다.

구문#

REMOVE_XID (xidname     IN VARCHAR(256));

파라미터#

이름 입출력 데이터 타입 설명
xidname IN VARCHAR(256) 삭제할 XID의 이름

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

REMOVE_XID는 다음의 시스템 정의 예외들을 발생시킬 수 있다.

  • NOT_EXIST_XID

  • InvalidXaState

REFRESH_MATERIALIZED_VIEW#

베이스 테이블의 데이터 변경 사항을 materialized view에 반영하는 저장 프로시저이다. 즉, 이 저장 프로시저를 실행하면 해당 materialized view의 데이터가 베이스 테이블의 최신 데이터로 갱신된다.

리프레쉬 하려는 materialized view의 소유자가 아닌 사용자가 이 저장 프로시저를 실행하려면 아래의 권한이 있어야 한다:

  • ALTER ANY MATERIALIZED VIEW 시스템 권한

  • SELECT ANY TABLE 시스템 권한 또는 materialized view 를 위해 자동으로 생성된 뷰에 대한 SELECT 객체 권한

  • INSERT ANY TABLE 및 DELETE ANY TABLE 시스템 권한, 또는 materialized view를 위해 자동으로 생성된 테이블에 대한 INSERT 및 DELETE 객체 권한

구문#

REFRESH_MATERIALIZED_VIEW (
owner_name        IN VARCHAR(128),
mview_name        IN VARCHAR(128));

파라미터#

이름 입출력 데이터 타입 설명
owner_name IN VARCHAR(128) Materialized view의 소유자 이름
mview_name IN VARCHAR(128) Materialized view의 이름

결과값#

저장 프로시저이므로 반환되는 결과값이 없다.

예외#

  • 권한 부재로 인한 SELECT, DELETE, 또는 INSERT 실패 예외

  • 테이블스페이스 공간 부족, materialized view 최대 행 초과 등의 예외

  • 아래 주의 사항과 관련한 예외

주의 사항#

아래의 몇 가지 이유로 리프레쉬가 실패할 수 있다.

  • 사용자가 베이스 테이블의 정의를 변경하거나 테이블을 삭제한 경우

  • 사용자가 ALTER TABLE 구문을 사용하여 materialized view를 위해 자동으로 생성된 테이블의 정의를 변경한 경우

  • Lock Timeout이 발생하는 경우

  • 테이블 제약 조건(constratints)에 대한 위반이 발생하는 경우

SET_CLIENT_INFO#

V$SESSION의 CLIENT_APP_INFO 칼럼과 CLIENT_INFO 칼럼정보를 설정한다.

구문#

SET_CLIENT_INFO (client_info IN VARCHAR(128));

파라미터#

이름 입출력 데이터 타입 설명
client_info IN VARCHAR(128) 클라이언트 정보

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

이 프로시저는 예외를 발생시키지 않는다.

SET_MODULE#

V$SESSION에 MODULE칼럼과 ACTION 칼럼의 정보를 설정한다.

구문#

SET_MODULE (module IN VARCHAR(128),action IN VARCHAR(128));

파라미터#

이름 입출력 데이터 타입 설명
module IN VARCHAR(128) 모듈 정보
action IN VARCHAR(128) 모듈 활성정보

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

이 프로시저는 예외를 발생시키지 않는다.

SLEEP#

이 프로시저는 seconds 인자에 지정한 초만큼 세션을 쉬게 한다.

구문#

SLEEP (seconds IN INTEGER);

파라미터#

이름 입출력 데이터 타입 설명
seconds IN INTEGER 쉬는 시간 (초)

결과값#

저장 프로시저이므로 반환하는 결과값은 없다.

예외#

이 프로시저는 예외를 발생시키지 않는다.