サンプル・アプリケーションを使用したストアード・プロシージャーの作成

この例では、MYPROC() という名前のストアード・プロシージャ ーを使用します。ここでは、口座名、オプション、振替額、預金残高 、当座預金残高の 5 つのパラメーターを使用します。以下のリストでは、各 パラメーターの目的を示しています。

           口座名:  口座を識別する入力パラメーター。
       オプション:  実行する内容を判別する入力パラメーター。
                    オプションは以下の 3 つです。
		                  1、残高照会
		                  2、普通預金から当座預金への振替
		                  3、当座預金から普通預金への振替
           振替額:  当座預金と普通預金の間で振り替えた
                    合計金額の入力パラメーター。
     普通預金残高:  普通預金口座の残高を戻す出力パラメーター。
     当座預金残高:  当座預金口座の残高を戻す出力パラメーター。

ストアード・プロシージャーを構築するコードを以下に示します。

SQL_API_RC SQL_API_FN
myProc(char * szName, int * nCmd, int * nAmount, int * nSaving, int * nChecking)
{
	SQLHENV		henv;
	SQLHDBC		hdbc;
	SQLHSTMT	hstmt;
	SQLRETURN	rc;
	int			nRetSize;
 
	SQLCHAR  str1[]="select saving, checking from db2e.myaccount where name = ?";
	SQLCHAR  str2[]="update db2e.myaccount set saving=saving - ?,
          checking=checking + ? where name=?";
	SQLCHAR  str3[]="update db2e.myaccount set saving=saving + ?,
          checking=checking - ? where name=?";
 
	//****************************************************************
	//* Prepare connection and statement
	//****************************************************************
	rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	//checkerror
	rc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc);
	//checkerror
	rc = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, SQL_NTS);
	//checkerror
   	 rc = SQLConnect(hdbc, NULL, SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS);
	//checkerror
	rc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt);
	//checkerror
    
	//****************************************************************
	//* Update account
	//****************************************************************
	if ( *nCmd == 2 || *nCmd == 3 ){
		if ( *nCmd == 2 ){ //Transfer from saving to checking
			rc = SQLPrepare(hstmt, str2, SQL_NTS); //checkerror
		}
		if ( *nCmd == 3 ){ //Transfer from checking to saving
			rc = SQLPrepare(hstmt, str3, SQL_NTS); //checkerror
		}
		rc = SQLBindParameter(hstmt,
				1,
				SQL_PARAM_INPUT,
				SQL_C_LONG,
				SQL_INTEGER,
				0,
				0,
				(SQLPOINTER)nAmount,
				0,
				NULL ); //checkerror
		rc = SQLBindParameter(hstmt,
				2,
				SQL_PARAM_INPUT,
				SQL_C_LONG,
				SQL_INTEGER,
				0,
				0,
				(SQLPOINTER)nAmount,
				0,
				NULL ); //checkerror
 
		rc = SQLBindParameter(hstmt,
				3,
				SQL_PARAM_INPUT,
				SQL_C_CHAR,
				SQL_CHAR,
				0,
				0,
				(SQLPOINTER)szName,
				0,
				NULL ); //checkerror
		rc = SQLExecute(hstmt); //checkerror
	}
 
	//****************************************************************
	//* Retrieve account balance
	//****************************************************************
	rc = SQLPrepare(hstmt, str1, SQL_NTS); //checkerror
	rc = SQLBindParameter(hstmt,
			1,
			SQL_PARAM_INPUT,
			SQL_C_CHAR,
			SQL_CHAR,
			0,
			0,
			(SQLPOINTER)szName,
			0,
			NULL );//checkerror
	rc = SQLExecute(hstmt);//checkerror
	if ( rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO )
	{
		while ( (rc = SQLFetch(hstmt) ) == SQL_SUCCESS ){
			rc = SQLGetData( hstmt,
				(SQLSMALLINT)1,
				SQL_C_LONG,
				nSaving,
				sizeof(int) ,
				&nRetSize )	; //checkerror
			rc = SQLGetData( hstmt,
				(SQLSMALLINT)2,
				SQL_C_LONG,
				nChecking,
				sizeof(int) ,
				&nRetSize )	; //checkerror
		}
	}
	//****************************************************************
	//* Clean up
	//****************************************************************
   	 rc = SQLEndTran( SQL_HANDLE_DBC, hdbc, SQL_COMMIT );
	SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
	SQLDisconnect(hdbc);
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
	SQLFreeHandle(SQL_HANDLE_ENV, henv);
	return (0);
}
 

Windows 32 ビット版プラットフォームでは、ストアード・プロシージャーを ビルドして、ダイナミック・リンク・ライブラリー (mydll.dll) に組み込んだ後で 、¥SQLLIB¥function ディレクトリーにコピーします。 次に、ストアード・プロシージャーを登録します。

  1. DB2 コマンド・ウィンドウをオープンします。
  2. 次のコマンドを使用して、MYSAMPLE データベースに接続します。
    DB2 CONNECT TO MYSAMPLE
    
  3. regscript.scr という名前のスクリプトを使用してストアード・プロシ ージャーを登録し、オプションを構成します。このスクリプトでは、次のコ ードを使用します。
    CREATE PROCEDURE db2e.MYPROC (IN szName CHAR(16),
                                  IN nCmd INTEGER,
                                  IN nAmount INTEGER,
                                  OUT nSaving INTEGER,
                                  OUT nChecking INTEGER )
    DYNAMIC RESULT SETS 1
    LANGUAGE C
    PARAMETER STYLE GENERAL
    NO DBINFO
    FENCED
    MODIFIES SQL DATA
    PROGRAM TYPE SUB
    EXTERNAL NAME 'mydll!myProc'@
    

    スクリプトを実行するために、次のコマンドを入力します。

    db2 -td@ -vf regscript.scr
    

これで、ストアード・プロシージャー db2e.MYPROC が構成されました。 次に、モバイル・デバイス管理センターを使用して、サブスクリプションを作成します。

関連した概念

関連したタスク

関連した解説