仕様: | DB2 CLI 1.1 | ODBC 1.0 | ISO CLI |
SQLPrepare() は、 SQLPrepare() を使用して正常に作成されたステートメントを 1 回または数回実行します。ステートメントは、SQLBindParameter()、 SQLSetParam() または SQLBindFileToParam() によってパラメーター・マーカーにバインドされたアプリケーション変数の現行値を使用して実行されます。
構文
SQLRETURN SQLExecute (SQLHSTMT StatementHandle); /* hstmt */
関数引き数
データ・タイプ | 引き数 | 使用法 | 説明 |
---|---|---|---|
SQLHSTMT | StatementHandle | 入力 | ステートメント・ハンドル。 StatementHandle に関連したオープン・カーソルがあってはなりません。詳細については、 SQLFreeStmt - ステートメント・ハンドルの解放 (またはリセット) を参照してください。 |
使用法
SQL ステートメント・ストリングの中に、パラメーター・マーカーが含まれている場合があります。パラメーター・マーカーは "?" 文字で表され、また、 SQLExecute() を呼び出すときにアプリケーションに提供された値が置き換えられる、ステートメント内の位置を指示するのに使用されます。この値は、以下のものから得られます。
パラメーター・マーカーにアプリケーション記憶域をバインドするには、 SQLSetParam() または SQLBindParameter() を使用します。
LOB パラメーター・マーカーにファイルをバインドするには、 SQLBindFileToParam() を使用します。 SQLExecDirect() を実行すると、 DB2 CLI はファイルの内容をデータベース・サーバーに直接転送します。
SQLExecute() を呼び出す前に、すべてのパラメーターをバインドしておく必要があります。
アプリケーションが SQLExecute() 呼び出しからの結果を処理した後で、新しい (または同じ) パラメーター値で再度ステートメントを実行することができます。
SQLExecute() を呼び出しても、 SQLExecDirect() で実行されたステートメントを再実行することはできません。したがって、SQLPrepare() を最初に呼び出す必要があります。
作成された SQL ステートメントが照会の場合、SQLExecute() はカーソル名を生成し、そのカーソルをオープンします。アプリケーションが SQLSetCursorName() を使用してカーソル名をステートメント・ハンドルに関連付けた場合、 DB2 CLI はアプリケーションで生成されたカーソル名を内部作成されたカーソル名に関連付けます。
照会を複数回実行するには、アプリケーションは SQL_CLOSE オプションを指定して SQLFreeStmt() を呼び出し、カーソルをクローズする必要があります。 SQLExecute() を呼び出すときに、ステートメント・ハンドルのカーソルがオープンしていてはなりません。
結果セットを生成すると、 SQLFetch() または SQLFetchScroll() はバインドされた変数、 LOB ロケーター、または LOB ファイル参照のいずれかにその次のデータ行 (複数行の場合もある) を取り出します。 (SQLBindCol() または SQLBindFileToCol を使用します。) また、バインドされなかった列についても、 SQLGetData() を呼び出すとデータを取り出すことができます。
SQL ステートメントが定位置 DELETE または定位置 UPDATE の場合は、 SQLExecute()を呼び出すときに、ステートメントで参照されるカーソルを行に入れる必要があり、また、同じ接続ハンドルの別個のステートメントでそのカーソルを定義する必要があります。
SQLParamOptions() を呼び出して、入力パラメーター値の配列が各パラメーター・マーカーにバインドされるように指定した場合、アプリケーションは SQLExecDirect() を一度だけ呼び出して、入力パラメーター値の配列全体を処理します。実行されたステートメントが複数の結果セットを返す (入力パラメーターの各集まりごとに 1 つ) 場合は、一度現在の結果セットでの処理を完了してから、 SQLMoreResults() を使用して次の結果セットに進みます。詳細については、SQLMoreResults - さらに結果セットがあるかどうかを判別するを参照してください。
戻りコード
アプリケーションが SQLParamData() と SQLPutData() を呼び出して、実行時データ・パラメーター値を入力するよう要求すると、SQL_NEED_DATA が返されます。
SQL ステートメントが検索 UPDATE または検索 DELETE であり、検索条件を満たしている行がない場合、SQL_NO_DATA_FOUND が返されます。
診断
SQLExecute() の SQLSTATE には、
SQLExecDirect() (表 58 を参照) が含まれています。ただし、HY009 と HY090 は除き、以下の表に示された SQLSTATE を追加します。
SQLSTATE | 説明 | 解説 |
---|---|---|
HY010 | 関数の順序エラーです。 | 指定された StatementHandle が準備済みではありませんでした。最初に SQLPrepare() を呼び出さずに、 SQLExecute() を呼び出しました。 |
許可
なし。
(ここで完全サンプル tbread.c を使用することもできます 。)
/* From the CLI sample TBREAD.C */ /* ... */ /* execute the statement for divisionParam = Eastern */ printf(" Execute the prepared statement for\n"); printf(" divisionParam = 'Eastern'\n"); strcpy( divisionParam, "Eastern"); sqlrc = SQLExecute( hstmt ) ; STMT_HANDLE_CHECK( hstmt, sqlrc);
参照