Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

cci_execute_array

설명

prepared statement에 하나 이상의 값이 바인딩되는 경우, 바인딩되는 변수의 값을 배열(array)로 전달받아 각각의 값을 변수에 바인딩하여 질의를 실행한다.

데이터를 바인딩하기 위해서는 cci_bind_param_array_size() 함수를 호출하여 배열의 크기를 지정한 후, cci_bind_param_array() 함수를 이용하여 각각의 값을 변수에 바인딩하고, cci_execute_array() 함수를 호출하여 질의를 실행한다. 질의 결과는 T_CCI_QUERY_RESULT 구조체의 배열에 저장한다.

cci_execute()함수를 호출하면 질의 수행 결과 셋을 가져올 수 있으나, cci_execute_array() 함수는 query_result 변수로 수행된 질의 개수를 반환한다. 실행 결과에 대한 정보를 얻기 위해서는 CCI_QUERY_RESULT_RESULT, CCI_QUERY_RESULT_ERR_NO, CCI_QUERY_RESULT_ERR_MSG, CCI_QUERY_RESULT_STMT_TYPE과 같은 매크로를 이용할 수 있다. 매크로에서는 입력받는 각 인자에 대한 유효성 검사가 이루어지지 않으므로 주의한다. query_result 변수의 사용이 끝나면 cci_query_result_free 함수를 이용하여 질의 결과를 삭제해야 한다.

매크로

리턴 값 타입

의미

CCI_QUERY_RESULT_RESULT

int

결과 개수 또는 에러 인식자(-1: CAS 에러, -2: DBMS 에러)

CCI_QUERY_RESULT_ERR_NO

int

질의에 대한 에러 번호

CCI_QUERY_RESULT_ERR_MSG

char*

질의에 대한 에러 메시지

CCI_QUERY_RESULT_STMT_TYPE

int (T_CCI_CUBRID_STMT enum)

질의문의 타입

자동 커밋 모드인 경우 배열 내의 각 질의가 수행될 때마다 커밋된다.

주의 2008 R4.3 이전 버전에서는 자동 커밋 모드인 경우 배열 내의 모든 질의가 수행된 이후에 커밋되었다.

구문

int cci_execute_array(int req_handle, T_CCI_QUERY_RESULT **query_result, T_CCI_ERROR *err_buf)

  • req_handle : (IN) prepared statement의 요청 핸들
  • query_result : (OUT) 질의 결과(수행된 질의 개수)
  • err_buf : (OUT) 데이터베이스 에러 버퍼
리턴 값
  • 성공: 수행된 질의의 개수
  • 실패: 에러 코드
에러 코드
  • CCI_ER_REQ_HANDLE
  • CCI_ER_BIND
  • CCI_ER_DBMS
  • CCI_ER_COMMUNICATION
  • CCI_ER_QUERY_TIMEOUT
  • CCI_ER_LOGIN_TIMEOUT
예제

char *query =

  "update participant set gold = ? where host_year = ? and nation_code = 'KOR'";

int gold[2];

char *host_year[2];

int null_ind[2];

T_CCI_QUERY_RESULT *result;

int n_executed;

...

 

req = cci_prepare (con, query, 0, &cci_error);

if (req < 0)

{

  printf ("prepare error: %d, %s ", cci_error.err_code, cci_error.err_msg);

  goto handle_error;

}

 

gold[0] = 20;

host_year[0] = "2004";

 

gold[1] = 15;

host_year[1] = "2008";

 

null_ind[0] = null_ind[1] = 0;

error = cci_bind_param_array_size (req, 2);

if (error < 0)

{

  printf ("bind_param_array_size error: %d ", error);

  goto handle_error;

}

 

error =

  cci_bind_param_array (req, 1, CCI_A_TYPE_INT, gold, null_ind, CCI_U_TYPE_INT);

if (error < 0)

{

  printf ("bind_param_array error: %d ", error);

  goto handle_error;

}

error =

  cci_bind_param_array (req, 2, CCI_A_TYPE_STR, host_year, null_ind, CCI_U_TYPE_INT);

if (error < 0)

  {

  printf ("bind_param_array error: %d ", error);

  goto handle_error;

}

 

n_executed = cci_execute_array (req, &result, &cci_error);

if (n_executed < 0)

{

  printf ("execute error: %d, %s ", cci_error.err_code,

            cci_error.err_msg);

  goto handle_error;

}

for (i = 1; i <= n_executed; i++)

{

  printf ("query %d ", i);

  printf ("result count = %d ", CCI_QUERY_RESULT_RESULT (result, i));

  printf ("error message = %s ", CCI_QUERY_RESULT_ERR_MSG (result, i));

  printf ("statement type = %d ",

          CCI_QUERY_RESULT_STMT_TYPE (result, i));

}

error = cci_query_result_free (result, n_executed);

if (error < 0)

{

  printf ("query_result_free: %d ", error);

  goto handle_error;

}

error = cci_end_tran(con, CCI_TRAN_COMMIT, &cci_error);

if (error < 0)

{

  printf ("end_tran: %d, %s ", cci_error.err_code, cci_error.err_msg);

  goto handle_error;

}