バッチ処理
CData ODBC Driver for NetSuite は、ODBC Batch API を介してNetSuite で一括ロードをサポートします。本製品 は、関連するSQL データ操作ステートメントを1つのバルクAPI 要求に変換することによって同時に実行できます。アプリケーションのコードでは、本製品 は一連の入力とパラメータ化されたクエリに基づいてステートメントを実行します。
バッチ更新プロシージャ
バッチ更新を実行するには、次の手順を実行してください。
- ステートメント内の各パラメータのカラム値の配列を定義します。
- SQL_ATTR_PARAMSET_SIZE ステートメント属性を設定します。
- 各配列を各パラメータにバインドします。
- パラメータ化されたステートメントを実行します。
一括挿入
次のコードは、SQLSetStmtAttr、SQLBindParameter、およびSQLExecDirect を使って一括挿入を実行する方法を示します。
SQLHSTMT pHstmt = NULL;
const int MAX_INSERT_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char AcctNameArray[MAX_INSERT_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbAcctNameArray[MAX_INSERT_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_INSERT_COUNT, 0);
char *AcctName1 = "Savings", *AcctName2 = "Petty Cash";
cbAcctNameArray[0] = strlen(AcctName1);
cbAcctNameArray[1] = strlen(AcctName2);
memcpy(AcctNameArray[0], AcctName1, strlen(AcctName1));
memcpy(AcctNameArray[1], AcctName2, strlen(AcctName2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, AcctNameArray, MAX_BUFFER_SIZE, cbAcctNameArray);
retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "INSERT INTO Account (AcctName) VALUES (?)", SQL_NTS);
新しいレコードのId を取得するには、LastResultInfo テーブルをクエリします。
SQLExecDirect(hstmt, (SQLTCHAR*)"SELECT * FROM LastResultInfo#TEMP", SQL_NTS);
SQLTCHAR sInternalId[20] = {0};
SQLLEN cbInternalId = 0;
SQLBindCol(hstmt, 1, SQL_C_CHAR, sInternalId, 20, &cbInternalId);
SQLRETURN retcode = SQLFetch(hstmt);
一括更新
更新するレコードの主キーの配列を指定する必要があります。次のコードは、SQLSetStmtAttr、SQLBindParameter、およびSQLExecDirect を使って一括更新を実行する方法を示します。
SQLHSTMT pHstmt = NULL;
const int MAX_UPDATE_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char InternalIdArray[MAX_UPDATE_COUNT][MAX_BUFFER_SIZE] = { 0 };
char InternalIdArray[MAX_UPDATE_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbInternalIdArray[MAX_UPDATE_COUNT] = { 0 };
SQLLEN cbInternalIdArray[MAX_UPDATE_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_UPDATE_COUNT, 0);
char *AcctName1 = "Savings", *AcctName2 = "Petty Cash";
char *InternalId1 = "InternalId1", *InternalId2 = "InternalId2";
cbAcctNameArray[0] = strlen(AcctName1);
cbAcctNameArray[1] = strlen(AcctName2);
cbInternalIdArray[0] = strlen(InternalId1);
cbInternalIdArray[1] = strlen(InternalId2);
memcpy(AcctNameArray[0], AcctName1, strlen(AcctName1));
memcpy(AcctNameArray[1], AcctName2, strlen(AcctName2));
memcpy(InternalIdArray[0], InternalId1, strlen(InternalId1));
memcpy(InternalIdArray[1], InternalId2, strlen(InternalId2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, AcctNameArray, MAX_BUFFER_SIZE, cbAcctNameArray);
retcode = SQLBindParameter(pHstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, InternalIdArray, MAX_BUFFER_SIZE, cbInternalIdArray);
retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "UPDATE Account SET AcctName = ? WHERE InternalId = ?", SQL_NTS);
一括削除
削除するレコードの主キーの配列を指定する必要があります。次のコードは、SQLSetStmtAttr、SQLBindParameter、およびSQLExecDirect を使って一括削除を実行する方法を示します。
SQLHSTMT pHstmt = NULL;
const int MAX_DELETE_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char InternalIdArray[MAX_DELETE_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbInternalIdArray[MAX_DELETE_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_DELETE_COUNT, 0);
char *InternalId1 = "InternalId1", *InternalId2 = "InternalId2";
cbInternalIdArray[0] = strlen(InternalId1);
cbInternalIdArray[1] = strlen(InternalId2);
memcpy(InternalIdArray[0], InternalId1, strlen(InternalId1));
memcpy(InternalIdArray[1], InternalId2, strlen(InternalId2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, InternalIdArray, MAX_BUFFER_SIZE, cbInternalIdArray);
retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "DELETE FROM Account WHERE InternalId = ?", SQL_NTS);