调用存储过程
采用预编译SQL的方式执行存储过程:
1)使用SQLPrepare准备待执行的SQL,其中函数的调用形式为{call funcname(?,...)}
2)使用SQLBindParameter绑定待调用的函数的参数
3)使用SQLExecute执行SQL
4)使用SQLFetch和SQLGetData获取执行结果
例子:
/*获取语句句柄*/
rc = SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);
/*预编译SQL,调用函数时使用{call funcname(?,...)} */
SQLPrepare(V_OD_hstmt, (SQLCHAR *) "{ call length(?) }", SQL_NTS);
cbParams[paramno] = SQL_NTS;
/*绑定参数 */
SQLBindParameter(V_OD_hstmt, 1, SQL_PARAM_INPUT,
SQL_C_CHAR, /* value type */
SQL_CHAR, /* param type */
20, /* column size */
0, /* dec digits */
(SQLCHAR*)"testvalue", /* param value ptr */
0, /* buffer len */
NULL /* StrLen_or_IndPtr */);
/*执行*/
SQLExecute(V_OD_hstmt);
/* 获取执行结果 */
rc =SQLFetch(V_OD_hstmt);
/* 通过SQLGetData获取并返回数据。*/
while(rc != SQL_NO_DATA)
{
char buf[40];
SQLLEN ind;
SQLGetData(V_OD_hstmt, 1, SQL_C_CHAR, buf, sizeof(buf), &ind);
printf("SQLGetData ----ID = %s\n",buf);
rc = SQLFetch(V_OD_hstmt);
};