일괄처리(Batch) 지원 REMOTE 함수
일괄처리(Batch) 지원 REMOTE 함수#
이 절은 Altibase 데이터베이스 링크가 일괄처리(Batch)할 수 있는 Remote함수와 관련 함수를 기술한다. 이 함수는 저장 프로시저 내에서만 사용할 수 있다. 일괄처리 방법으로 원격서버에 쿼리를 수행할 때는 아래와 같은 순서대로 사용할 것을 권장한다.
- 
REMOTE_ALLOC_STATEMENT_BATCH
 - 
REMOTE_BIND_VARIABLE_BATCH
 - 
REMOTE_ADD_BATCH
 - 
REMOTE_EXECUTE_BATCH
 - 
REMOTE_GET_RESULT_COUNT_BATCH
 - 
REMOTE_GET_RESULT_BATCH
 - 
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의 예제를 참고하라.