Procedure Parameters

プロシージャ呼び出しのパラメーターには、入力、入力/出力、または出力パラメーターを指定できます。 これは、常に入力パラメーターである他のすべての SQL ステートメントのパラメーターとは異なります。

入力パラメーターは、プロシージャに値を送信するために使用されます。 たとえば、Parts テーブルに PartID、Description、Price の各列があるとします。 InsertPart プロシージャには、テーブル内の各列の入力パラメーターがある場合があります。 次に例を示します。

{call InsertPart(?, ?, ?)}  

ドライバーは、SQLExecDirect または SQLExecute がSQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE、またはSQL_NO_DATAを返すまで、入力バッファーの内容を変更しないでください。 SQLExecDirect または SQLExecute が SQL_NEED_DATA または SQL_STILL_EXECUTING を返す間は、入力バッファーの内容を変更しないでください。

入力/出力パラメーターは、値をプロシージャに送信し、プロシージャから値を取得するために使用されます。 入力パラメーターと出力パラメーターの両方と同じパラメーターを使用すると、混乱を招く傾向があり、回避する必要があります。 たとえば、プロシージャが注文 ID を受け取り、顧客の ID を返したとします。 これは、1 つの入力/出力パラメーターで定義できます。

{call GetCustID(?)}  

注文 ID の入力パラメーターと、顧客 ID の出力または入力/出力パラメーターの 2 つのパラメーターを使用することをお勧めします。

{call GetCustID(?, ?)}  

出力パラメーターは、プロシージャの戻り値を取得し、プロシージャ引数から値を取得するために使用されます。値を返すプロシージャは、関数と呼ばれることもあります。 たとえば、前述の GetCustID プロシージャが、オーダーを見つけることができたかどうかを示す値を返したとします。 次の呼び出しでは、最初のパラメーターはプロシージャの戻-だり値を取得するために使用される出力パラメーターです。2 番目のパラメーターは注文 ID を指定するために使用される入力パラメーターであり、3 番目のパラメーターは顧客 ID を取得するために使用される出力パラメーターです。

{? = call GetCustID(?, ?)}  

ドライバーは、プロシージャ内の入力パラメーターと入力/出力パラメーターの値を、他の SQL ステートメントの入力パラメーターと同じ方法で処理します。 ステートメントを実行すると、これらのパラメーターにバインドされた変数の値を取得し、データ ソースに送信します。

ステートメントが実行されると、ドライバーは、入力/出力パラメーターと出力パラメーターの戻り値を、それらのパラメーターにバインドされた変数に格納します。 これらの戻り値は、プロシージャによって返されるすべての結果がフェッチ され、SQLMoreResults が SQL_NO_DATA を返すまで設定されるとは限りません。 ステートメントを実行するとエラーが発生した場合、入力/出力パラメーター バッファーまたは出力パラメーター バッファーの内容は未定義になります。

アプリケーションは SQLProcedure を呼び出して、プロシージャに戻り値があるかどうかを判断します。 SQLProcedureColumns を呼び出して、各プロシージャ パラメーターの型 (戻り値、入力、入力/出力、または出力) を決定します。