ストアドプロシージャの実行
ストアドプロシージャの呼び出し手順
SQLExecDirect を使用してストアドプロシージャを呼び出し、SQLFetch とSQLGetData を使用してその結果を反復処理します。次の例は、CALL 構文を示します。EXECUTE ステートメント で詳しく説明されているEXECUTE 構文を使用することもできます。
例
SQLHENV henv;
SQLHDBC hdbc;
SQLLEN cbObjectName = SQL_NTS;
if (SQLAllocHandle(SQL_HANDLE_ENV, 0 ,&henv) == SQL_SUCCESS) {
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (SQLAllocHandle(SQL_HANDLE_DBC, henv ,&hdbc) == SQL_SUCCESS) {
if (SQLConnect(hdbc, "CData SAPHanaXSA Source", SQL_NTS, 0, 0, 0, 0) == SQL_SUCCESS) {
SQLHSTMT hstmt;
SQLAllocHandle(SQL_HANDLE_STMT, hdbc ,&hstmt);
if (SQLExecDirect(hstmt, (SQLCHAR*)"{?=call CreateJob('Account', 'Insert')}", SQL_NTS) == SQL_SUCCESS) {
if (SQLExecDirect(hstmt, "{?=call SampleProcedure('7')}", SQL_NTS) == SQL_SUCCESS) {
char sCreatedById[255] = {0};
SQLLEN cbsCreatedById = 0;
while(SQLFetch(hstmt) == SQL_SUCCESS) {
SQLGetData(hstmt, 2, SQL_C_CHAR, (SQLPOINTER)sCreatedById, 255, &cbsCreatedById);
printf("CreatedById: %s\n", sCreatedById);
}
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}