prepared statement가 SELECT일 경우, 이 함수를 이용하여 실행 결과에 대한 컬럼 정보가 저장되어 있는 T_CCI_COL_INFO 구조체를 가져올 수 있다. SELECT 질의가 아닌 경우, NULL을 반환하고 num 값은 0이 된다.
T_CCI_COL_INFO 구조체에서 컬럼 정보를 가져오기 위해서 구조체에 직접 접근해도 되지만, 다음과 같이 정의된 매크로를 이용하여 정보를 가져올 수 있다. 각 매크로의 인자로 T_CCI_COL_INFO 구조체의 주소와 컬럼 인덱스가 지정되며, 매크로는 SELECT 질의에 대해서만 호출할 수 있다. 매크로에서 입력받는 각 인자에 대한 유효성 검사가 이루어지지 않으므로 주의한다. 매크로 리턴 값의 타입이 char*인 경우 메모리 포인터를 해제(free)하지 않아야 한다.
매크로 |
리턴 값 타입 |
의미 |
---|---|---|
CCI_GET_RESULT_INFO_TYPE |
T_CCI_U_TYPE |
컬럼의 type |
CCI_GET_RESULT_INFO_SCALE |
short |
컬럼의 scale |
CCI_GET_RESULT_INFO_PRECISION |
int |
컬럼의 precision |
CCI_GET_RESULT_INFO_NAME |
char* |
컬럼의 이름 |
CCI_GET_RESULT_INFO_ATTR_NAME |
char* |
컬럼의 속성 이름 |
CCI_GET_RESULT_INFO_CLASS_NAME |
char* |
컬럼의 클래스 이름 |
CCI_GET_RESULT_INFO_IN_NON_NULL |
char (0 or 1) |
컬럼이 NULL인지 여부 |
T_CCI_COL_INFO* cci_get_result_info(int req_handle, T_CCI_SQLX_CMD *cmd_type, int *num)
col_info = cci_get_result_info (req, &cmd_type, &col_count);
if (col_info == NULL)
{
printf ("get_result_info error: %d, %s\n", cci_error.err_code,
cci_error.err_msg);
goto handle_error;
}
for (i = 1; i <= col_count; i++)
{
printf ("%-12s = %d\n", "type", CCI_GET_RESULT_INFO_TYPE (col_info, i));
printf ("%-12s = %d\n", "scale",
CCI_GET_RESULT_INFO_SCALE (col_info, i));
printf ("%-12s = %d\n", "precision",
CCI_GET_RESULT_INFO_PRECISION (col_info, i));
printf ("%-12s = %s\n", "name", CCI_GET_RESULT_INFO_NAME (col_info, i));
printf ("%-12s = %s\n", "attr_name",
CCI_GET_RESULT_INFO_ATTR_NAME (col_info, i));
printf ("%-12s = %s\n", "class_name",
CCI_GET_RESULT_INFO_CLASS_NAME (col_info, i));
printf ("%-12s = %s\n", "is_non_null",
CCI_GET_RESULT_INFO_IS_NON_NULL (col_info,i) ? "true" : "false");