SetProcedureメソッド
機能
引数で指定したストアドプロシジャ名をデータベースに通知します。
形式
void SetProcedure(LPCTSTR lpctProcedure,
UINT16 swWait = LOCK_OPT_DEFAULT) throw DBSQLCA
引数
lpctProcedure
実行するプロシジャ名を文字列で指定します。
- ORACLEの場合
OCIプログラムでプロシジャを実行する際に指定するPL/SQLブロック内の記述を指定します。ただし,プレースホルダは?に置き換えて指定してください。
PL/SQLについてはDBMSのマニュアルを参照してください。
OCIプログラムの指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
OCIプログラム
BEGIN
GET_SALARY(:id, :salary);
END;
DABroker for C++プログラム
SetProcedure("GET_SALARY(?,?)");
- HiRDBの場合
操作系SQLのCALL文に記述する内容を指定します。プロシジャの引数には?パラメタだけが指定できます。
CALL文の仕様についてはDBMSのマニュアルを参照してください。
HiRDBの埋め込みSQLの指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
埋め込みSQL
CALL GET_SALARY(?,?)
DABroker for C++プログラム
SetProcedure("GET_SALARY(?,?)");
- SQL Anywhereの場合
CALL文に記述する内容を指定します。動的に設定するプロシジャの引数には?パラメタだけが指定できます。
RETURN文を含むプロシジャや,ResultSetを返すプロシジャの場合も,SetProcedureメソッドの引数に指定する内容には特に変更ありません。
RETURN文で返す値はGetParamメソッドで取得します。
CALL文の仕様についてはDBMSのマニュアルを参照してください。
CALL文の指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
CALL文の指定
CALL GET_SALARY(id,salary)
DABroker for C++プログラム
SetProcedure("GET_SALARY(?,?)");
CALL文の指定(RETURN文を含むプロシジャの場合)
RETVALUE = CALL GET_SALARY_RET(id,salary)
DABroker for C++プログラム
SetProcedure("GET_SALARY(?,?)");
- Adaptive Server Anywhere,及びSQL Serverの場合
ODBCでプロシジャを実行する際に記述する内容を指定します。
動的に設定するプロシジャの引数には?パラメタだけが指定できます。
RETURN値はGetParamメソッドで取得します。
ODBCでのプロシジャの実行方法についてはDBMSのマニュアルを参照してください。
ODBCの指定とDABroker for C++の指定方法の比較を次に示します。
実行するプロシジャ名はGET_SALARY(in,out)とします。
ODBCの指定
{?=CALL GET_SALARY(id,salary)}
DABroker for C++プログラム
SetProcedure("GET_SALARY(?,?)");
swWait
実行するSQL単位に,処理対象のレコードがほかのトランザクションによってロックされている場合の処理を指定します。次の値のうち,どれか一つを指定します。この引数は,使用するDBMSがSQL Anywhere,Adaptive Server Anywhere の場合だけ指定できます。
- LOCK_OPT_DEFAULT
DBConnectionオブジェクトの設定を引き継ぎます。(DBDriverクラスのConnectメソッドの引数swWaitに指定した値)
- LOCK_OPT LOCK_OPT_NOWAIT,又は LOCK_OPT_WITH_ROLLBACK
ロックの解除を待たないで,すぐにエラーを返します。HiRDB又はXDM/RDの場合は同時にロールバックを実行します。それ以外のDBMSの場合は,ロールバックは実行しません。
- LOCK_OPT_WITHOUT_ROLLBACK
ロックの解除を待たないで,すぐにエラーを返します。ロールバックは実行しません。
ただし,現在のバージョンでは,XDM/RDではロールバックを実行します。また,HiRDBのDELETE,INSERT,UPDATE文では,このオプションは無効で,LOCK_OPY_WAITと同じ動作になります。
- LOCK_OPT_WAIT
ロックが解除されるまで待ちます。
戻り値
機能詳細
引数で指定したストアドプロシジャ名をデータベースに通知します。
使用するDBMSごとのパラメタの扱いを次に示します。
ORACLEの場合
- ストアドプロシジャが実行できます。
- IN,IN/OUTパラメタで動的に設定するパラメタ,又はOUTパラメタには「?」を指定します。
- 指定できるパラメタ数の最大値は64個です。
HiRDBの場合
- ストアドプロシジャが実行できます。
- IN,IN/OUT,OUTパラメタで動的に設定するパラメタかどうかにかかわらず,「?」を指定します。
- 指定できるパラメタ数は,データベースの仕様に従います。
SQLAnywhere,Adaptive Server Anywhereの場合
- ストアドプロシジャ及びファンクションが実行できます。
- IN,IN/OUTパラメタで動的に設定するパラメタには,「?」を指定します。OUTパラメタにも,?を指定します。
- 指定できるパラメタ数は,データベースの仕様に従います。
SQL Serverの場合
- ストアドプロシジャが実行できます。
- IN,IN/OUTパラメタで動的に設定するパラメタには,「?」を指定します。OUTパラメタにも,?を指定します。
- 指定できるパラメタ数は,データベースの仕様に従います。
発生する例外
DBSQLCA(RetCode)
- DB_ERROR_IN_ASYNC_EXECUTE
- 非同期実行中です。
- DB_ERROR_PROCEDURE_NOT_COMPLETE
- プロシジャが終了していません。
- DB_ERROR_DRIVER_ERROR
- DBMSでエラーが発生しました。
- DB_ERROR_DAB_ACCESS_ERROR
- DABrokerでエラーが発生しました。
- DBSQLCAクラスで詳細コードを確認してください。
- DB_ERROR_DAB_SYSTEMCALL_ERROR
- システムコールでエラーが発生しました。
- DBSQLCAクラスで詳細コードを確認してください。
- DB_ERROR_TIMEOUT
- タイムアウトが発生したため制御を戻します。