콘텐츠로 이동

일괄처리(Batch) 지원 REMOTE 함수

일괄처리(Batch) 지원 REMOTE 함수#

이 절은 Altibase 데이터베이스 링크가 일괄처리(Batch)할 수 있는 Remote함수와 관련 함수를 기술한다. 이 함수는 저장 프로시저 내에서만 사용할 수 있다. 일괄처리 방법으로 원격서버에 쿼리를 수행할 때는 아래와 같은 순서대로 사용할 것을 권장한다.

  1. REMOTE_ALLOC_STATEMENT_BATCH

  2. REMOTE_BIND_VARIABLE_BATCH

  3. REMOTE_ADD_BATCH

  4. REMOTE_EXECUTE_BATCH

  5. REMOTE_GET_RESULT_COUNT_BATCH

  6. REMOTE_GET_RESULT_BATCH

  7. REMOTE_FREE_STATEMENT_BATCH

IS_ARRAY_BOUND#

배열 타입의 인자가 바인드 되었는지 확인한다.

구문#

BOOLEAN variable: = IS_ARRAY_BOUND ();

파라미터#

없음

반환값#

배열 타입의 인자가 바인드 되면 TRUE를 반환하며, 그렇지 않으면 FALSE를 반환한다.

예제#

<질의> link1이 가리키는 원격 서버의 t1 테이블에 값을 삽입하는 저장 프로시저를 생성하라. 단, 데이터를 삽입 시 파라미터 바인딩을 사용하라.

iSQL> CREATE OR REPLACE PROCEDURE PROC1( A1 IN INTEGER, A2 IN INTEGER )
AS
    result INTEGER;
    i      INTEGER;
    count  INTEGER;
    sum    INTEGER := 0;
BEGIN
    PRINTLN('--- 0 ---');
    IF IS_ARRAY_BOUND() = TRUE THEN

    PRINTLN('--- 1 ---');
    /* First bound */
    IF IS_FIRST_ARRAY_BOUND() = TRUE THEN
    pkg1.stmtID := REMOTE_ALLOC_STATEMENT_BATCH( 'link1', 'insert into t1 values(?, ?)');
    PRINTLN('ALLOC BATCH');
    END IF;

    PRINTLN('--- 2 ---');
    /* Main Task */
    /* INSERT INTO T1 VALUES (A1, A2); */

    result := REMOTE_BIND_VARIABLE_BATCH( 'link1', pkg1.stmtID, 1, A1 );
    result := REMOTE_BIND_VARIABLE_BATCH( 'link1', pkg1.stmtID, 2, A2 );
    result := REMOTE_ADD_BATCH( 'link1', pkg1.stmtID );

    /* Last bound */
    IF IS_LAST_ARRAY_BOUND() = TRUE THEN
    result := REMOTE_EXECUTE_BATCH( 'link1', pkg1.stmtID );

    count := REMOTE_GET_RESULT_COUNT_BATCH( 'link1', pkg1.stmtID );
    FOR i IN 1 .. count LOOP
    result := REMOTE_GET_RESULT_BATCH( 'link1', pkg1.stmtID, i );
    sum := sum + result;
    END LOOP;
    PRINTLN('SUM is' || sum);

    result := REMOTE_FREE_STATEMENT_BATCH( 'link1', pkg1.stmtID );
    PRINTLN('FREE BATCH');
    END IF;
    PRINTLN('--- 3 ---');
    ELSE
    PRINTLN('NORMAL?');
    END IF;
END;
/

IS_FIRST_ARRAY_BOUND#

배열 타입의 변수가 처음 바인드 되었는지 확인한다.

구문#

BOOLEAN variable: = IS_FIRST_ARRAY_BOUND ();

파라미터#

없음

반환값#

배열 타입의 변수가 바인드 되었고 최초 수행이면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

IS_LAST_ARRAY_BOUND#

배열 타입의 변수가 마지막으로 바인드 되었는지 확인한다.

구문#

BOOLEAN variable: = IS_LAST_ARRAY_BOUND ();

파라미터#

없음

반환값#

배열 타입의 변수가 바인드 되었고 마지막 수행이면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_ADD_BATCH#

일괄처리 방식으로 수행할 SQL문을 추가한다.

구문#

INTEGER REMOTE_ADD_BATCH (
    dblink_name              IN VARCHAR,
    statement_id             IN BIGINT);

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_id IN BIGINT Statement ID

반환값#

음수를 반환하면 실패를 의미하고, 그렇지 않으면 성공을 의미한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_ALLOC_STATEMENT_BATCH#

일괄처리를 위한 함수이며, SQL문을 수행하기 위해 원격구문id(Statement ID)를 가져오는 함수이다.

구문#

BIGINT REMOTE_ALLOC_STATEMENT_BATCH (
    dblink_name        IN VARCHAR,
    statement_text     IN VARCHAR);

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_text IN VARCHAR 원격 서버에서 수행할 SQL 구문

반환값#

성공하면 statement ID를 반환하고, 그렇지 않으면 음수를 반환하다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_BIND_VARIABLE_BATCH#

일괄처리를 위한 함수이며, SQL구문의 파라미터 마커에 값을 바인딩한다.

구문#

INTEGER REMOTE_BIND_VARIABLE_BATCH (
    dblink_name              IN VARCHAR,
    statement_id             IN BIGINT,
    parameter_number         IN VARCHAR,
    value                    IN VARCHAR);

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_id IN BIGINT Statement ID
parameter_number IN VARCHAR SQL 구문에서 값을 바인딩 할 파라미터의 번호 순서. 1부터 시작
Value IN VARCHAR 바인딩 할 값

반환값#

음수를 반환하면 실패를 의미하고, 그렇지 않으면 성공을 의미한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_EXECUTE_BATCH#

REMOTE_ALLOC_STATEMENT_BATCH 함수로 얻은 원격구문id(Statement ID)를 이 함수의 인자 값으로 사용하여 SQL문을 원격서버에 일괄처리 방식으로 실제 수행한다.

파라미터#

INTEGER REMOTE_STATEMENT_BATCH (
    dblink_name              IN VARCHAR,
    statement_id             IN BIGINT );

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_id IN BIGINT Statement ID

반환값#

음수를 반환하면 실패를 의미하고, 그렇지 않으면 성공을 의미한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_FREE_STATEMENT_BATCH#

일괄처리 방식으로 수행한 구문을 해제한다.

구문#

INTEGER REMOTE_FREE_STATEMENT_BATCH (
    dblink_name              IN VARCHAR,
    statement_id             IN BIGINT );

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_id IN BIGINT Statement ID

반환값#

음수를 반환하면 실패를 의미하고, 그렇지 않으면 성공을 의미한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_GET_RESULT_COUNT_BATCH#

REMOTE_EXECUTE_BATCH함수를 수행한 후에 일괄처리로 수행된 SQL구문의 개수를 확인한다.

구문#

INTEGER REMOTE_GET_RESULT_COUNT_BATCH (
    dblink_name              IN VARCHAR,
    statement_id             IN BIGINT);

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_id IN BIGINT Statement ID

반환값#

음수를 반환하면 실패를 의미하고, 그렇지 않으면 성공을 의미한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.

REMOTE_GET_RESULT_BATCH#

REMOTE_EXECUTE_BATCH 함수를 수행한 후에 일괄처리로 수행된 SQL구문의 갱신 결과를 확인한다

구문#

INTEGER REMOTE_GET_RESULT_BATCH (
    dblink_name              IN VARCHAR,
    statement_id             IN BIGINT,
    index                    IN INTEGER);

파라미터#

이름 입출력 데이터 타입 설명
dblink_name IN VARCHAR 데이터베이스 링크 객체의 이름
statement_id IN BIGINT Statement ID
index IN INTEGER 일괄처리로 수행된 SQL 구문의 순서번호 (인덱스)

반환값#

음수를 반환하면 실패를 의미하고, 그렇지 않으면 입력 파라미터인 인덱스가 가리키는 SQL 구문의 수행결과(row count)를 반환한다.

예제#

IS_ARRAY_BOUND의 예제를 참고하라.