일괄처리(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의 예제를 참고하라.