DB2 Everyplace 同期サーバーのリモート照会およびストアード・プロシージャー・アダプターで定義された ストアード・プロシージャーを呼び出します。 ストアード・プロシージャーは、例えば、リモート・データベースのロケーションで実行を 行い、DB2 Everyplace クライアント・アプリケーションにデータを戻します。
SQL CALL ステートメントを使用するプログラムは 、2 つの部分 (クライアントとサーバー) で実行するように設計します。
呼び出し
リモート・ストアード・プロシージャーを DB2 Everyplace アプリケーションから呼び出すには 、SQLPrepare() に次の CALL ステートメント構文を渡し、 その後に SQLExecute() を続けます。
構文
>>-CALL--プロシージャー名--+-------------+--+------+----------->< | .-,-. | '-(--)-' | V | | '-(----?-+--)-'
説明
規則
なし
注意事項
CALL ステートメントは、DB2 Everyplace 同期サーバーに組み込まれているリモート照会とストアード・プロシージャー・アダプター を使用します。 DB2 Everyplace 同期サーバーでは、DB2 Everyplace アプリケーションの中で CALL ステートメントを使用する必要があります。 DB2 Everyplace は、ローカルのストアード・プロシージャーをサポートしません。
追加情報については、「DB2 Everyplace 同期サーバー 管理ガイド」のデータ・ソースに関するセクションを参照してください。
例
CALL ステートメントとリモート照会の使用法、およびストアード・プロシージャー・アダプターの完全な例は、「DB2 Everyplace 同期サーバー 管理ガイド」にあります。 次の例は、サンプル・アプリケーション内の CALL ステートメントのコーディングのみを示したものです。
ストアード・プロシージャー MYPROC() は、ソース・サーバーでデータベース mysample に対して定義されています。 AgentAdapter サブスクリプションは、DB2 Everyplace 同期サーバーにおいて次の属性で定義されています。
User ID: db2admin Password: db2admin Other: dbname=mysample;procname= db2e.MYPROC
CALL ステートメントを使用するサンプル・プログラムは、次のとおりです。
int main(int argc, char * argv[]) { SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; SQLRETURN rc; SQLCHAR strSQL[] = "CALL db2e.MYPROC(?,?,?,?,?)"; int nInd4, nInd5; int nSaving = 0, nChecking =0 ; int nCmd =0, nAmount=0; SQLCHAR strConnect[254]; //**************************************************************** //* Check input parameters //**************************************************************** if ( argc < 4 ){ printf("¥nUsage : myClient AccountName Cmd Amount"); printf("¥n cmd 1 : query balance"); printf("¥n cmd 2 : Transfer from Saving to Checking"); printf("¥n cmd 3 : Trnasfer from Checking to Saving"); return (99); } nCmd = atoi(argv[2]); nAmount = atoi(argv[3]); //**************************************************************** //* Allocate handles //**************************************************************** rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv; //checkerror rc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc); //checkerror if (argc == 5){ strcpy(strConnect,"http://"); strcat(strConnect,argv[4]); strcat(strConnect,"/servlet/com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample"); }else{ strcpy(strConnect, "http://127.0.0.1:8080/db2e/servlet/ com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample"); } //**************************************************************** //* Connect to remote database //**************************************************************** rc = SQLConnect(hdbc, strConnect, SQL_NTS, "userex", SQL_NTS, "userex", SQL_NTS ); //checkerror rc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt); //checkerror //**************************************************************** //* Prepare, Bind , and Execute the statement //**************************************************************** rc = SQLPrepare(hstmt,strSQL, SQL_NTS); //checkerror rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, (SQLPOINTER)argv[1], 0, NULL ); //checkerror rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nCmd, sizeof(int), NULL); //checkerror rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nAmount, sizeof(int), NULL ); //checkerror rc = SQLBindParameter(hstmt, 4, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nSaving, sizeof(int), &nInd4 ); //checkerror rc = SQLBindParameter(hstmt, 5, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nChecking, sizeof(int), &nInd5 ); //checkerror rc = SQLExecute(hstmt); //checkerror //**************************************************************** //* Print the balance //**************************************************************** printf("¥nSaving = %d",nSaving); printf("¥nChecking = %d",nChecking); SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); return 0;
関連した解説