CALL

DB2 Everyplace 同期サーバーのリモート照会およびストアード・プロシージャー・アダプターで定義された ストアード・プロシージャーを呼び出します。 ストアード・プロシージャーは、例えば、リモート・データベースのロケーションで実行を 行い、DB2 Everyplace クライアント・アプリケーションにデータを戻します。

SQL CALL ステートメントを使用するプログラムは 、2 つの部分 (クライアントとサーバー) で実行するように設計します。

呼び出し

リモート・ストアード・プロシージャーを DB2 Everyplace アプリケーションから呼び出すには 、SQLPrepare() に次の CALL ステートメント構文を渡し、 その後に SQLExecute() を続けます。

構文

>>-CALL--プロシージャー名--+-------------+--+------+-----------><
                           |    .-,-.    |  '-(--)-'
                           |    V   |    |
                           '-(----?-+--)-'
 
 

説明

プロシージャー名
リモート・サーバーで呼び出すプロシージャーを指定します。 ここに指定するプロシージャーは、現行の同期サーバーで AgentAdapter サブスクリプションに定義しておく必要があります。
?
CALL ステートメント構文図の ? は、ストアード・プロシージャーの引き数に対応する パラメーター・マーカーを示します。 引き数はすべて、パラメーター・マーカーを使用して渡さなければなりません。

規則

なし

注意事項

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;
 

関連した解説