void Execute (LPCTSTR lpctStatement,
UINT16 swWait = LOCK_OPT_DEFAULT,
UINT16 swType = TYPE_EXCLUSIVE|BUFFER_TYPE_SINGLE,
DBR_BLOB_TYPE nBLOBType = TYPE_BLOB_MEMORY,
LPCTSTR lpctBLOBFileName = NULL) throw DBSQLCA
lpctStatement
SQL文を指定します。SELECT文だけが指定できます。?パラメタを使用したSELECT文も指定できます。
SELECT文以外のSQLを実行する場合は,DBRDatabaseオブジェクトのExecuteDirectメソッドを使用してください。
swWait
実行するSQL単位に,検索対象のレコードがほかのトランザクションによってロックされていた場合の動作を指定します。
SQL/Kの場合は,どの値を指定しても,ロックが解除されるまで待ち状態になります。
XDM/SDの場合は,どの値を指定しても,ロックが解除されるまで待たないで,すぐにエラーを返します。
次の値のうち,どれか一つを指定します。
- LOCK_OPT_DEFAULT
親オブジェクトのDBRDatabaseオブジェクトの設定を引き継ぎます。
- 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
ロックが解除されるまで待ちます。
swType
次の三つの値を指定します。
- 検索したレコードに対するロック方法
- 検索時に使用するバッファ数
- VARCHARデータをDBR_BINARY型で取得した場合のLengthメンバ,RealLengthメンバの意味
指定する値は,上記三つの値の論理和になります。
このメソッドを実行しなかった場合の動作は,TYPE_EXCLUSIVE | BUFFER_TYPE_SINGLE | VARCHAR_LENGTH_DEFを指定した場合と同じになります。
- 検索したレコードに対するロック方法
- 次に示すTYPE_EXCLUSIVE,TYPE_NONE,TYPE_WAIT,TYPE_NOWAIT,TYPE_SHAREDのどれかの値で,検索したレコードに対するロック方法を指定します。
- TYPE_EXCLUSIVE
検索したレコードをDBRResultSetオブジェクトのUpdate,Deleteメソッドで,更新,削除をする場合は,このオプションを指定します。検索したレコードに排他ロックが掛かり,他のトランザクションからの参照・更新を制限できます。実際に排他ロックが掛かるのは,Openメソッドを実行した時点からです。
このオプションを指定した場合,ResultSetに検索できるレコードは1レコードだけで,SetMaxRowsで指定したレコード数は無視されます。また,検索条件に一致する次のレコードをアクセスするには,Nextメソッドを使用します。TYPE_EXCLUSIVEで取得するレコードの場合,カーソル制御のメソッドとしてはNextメソッドだけが指定できます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- ORACLE:FOR UPDATE
- SQL Anywhere,Adaptive Server Anywhere:オプション文字列は付加しません。
- HiRDB:FOR UPDATE("WITH EXCLUSIVE LOCK"が仮定されます)
- XDM/RD:FOR UPDATE("WITH EXCLUSIVE LOCK"が仮定されます)
- SQL Server:(テーブル名の後に)UPDLOCK
- SQL/K:FOR UPDATE
詳細については,マニュアル「SQL/K」を参照してください。
- XDM/SD:LOCK SU
- TYPE_NONE
参照専用でResultSetに検索結果を読み込みます。
DBMS種別によって, 検索するレコードに対して参照ロックが掛かかります。このオプションを指定した場合,一度に複数レコードをResultSetに読み込めます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- ORACLE:付加しません。
- SQL Anywhere,Adaptive Server Anywhere:付加しません。
- HiRDB:付加しません。
- XDM/RD:付加しません。
- SQL Server:付加しません。
- SQL/K:付加しません。
- XDM/SD:付加しません(SDEXCLUSIVE値が仮定されます)。
SDEXCLUSIVE値の詳細については,マニュアル「Database Connection Server」のコントロール空間起動制御文を参照してください。
- TYPE_WAIT(HiRDB,XDM/RD,SQL Server,SQL/K,XDM/SDの場合だけ有効です)
参照専用でResultSetに検索結果を読み込みます。
検索したレコードに対して参照ロックを掛けますが,見終わった行から排他制御を解除します。このため,DABroker for C++では,ResultSetにレコードを読み込んだ時点,つまり,Openメソッド,又はPageNextメソッドが完了した時点で,ロックが解除されています。
このオプションを指定した場合,一度に複数レコードをResultSetに読み込めます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- HiRDB:WITHOUT LOCK WAIT
- XDM/RD:WITHOUT LOCK WAIT
- SQL Server:(テーブル名の後に)HOLDLOCK
- SQL/K:付加しません。
- XDM/SD:LOCK SR
- TYPE_NOWAIT(HiRDB,XDM/RD,SQL Server,SQL/K,XDM/SDの場合だけ有効です)
参照専用でResultSetに検索結果を求めます。
該当するレコードがほかのトランザクションで更新中だったり,TYPE_EXCLUSIVEで検索している場合でも読み込めます。排他制御を全くしません。
このオプションを指定した場合,一度に複数レコードをResultSetに読み込めます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- HiRDB:WITHOUT LOCK NOWAIT
- XDM/RD:WITHOUT LOCK NOWAIT
- SQL Server:(テーブル名の後に)NOLOCK
- SQL/K:付加しません。
- XDM/SD:LOCK NR
- TYPE_SHARED(HiRDB,XDM/RD,SQL/K,XDM/SDの場合だけ有効です)
検索するレコードに共有ロックを掛けます。共有ロックの掛かったレコードは,ほかのトランザクションから参照できますが,更新はできません。
- HiRDB:WITH SHARE LOCK
- XDM/RD:WITH SHARE LOCK
- SQL/K:付加しません。
- XDM/SD:LOCK SR
- 検索時に使用するバッファ数
- 次に示すBUFFER_TYPE_SINGLE,又はBUFFER_TYPE_DOUBLEのどちらかの値で,検索時に使用するバッファ数を指定します。指定を省略した場合は,BUFFER_TYPE_SINGLEが仮定されます。なお,バッファの利用方法については,「3.3.3 検索性能の向上策」を参照してください。
- BUFFER_TYPE_SINGLE
検索結果を保持するバッファを一つだけ使います。
- BUFFER_TYPE_DOUBLE
検索結果を保持するバッファを二つ使います。
- VARCHARデータをDBR_BINARY型で取得したときのLengthメンバ,RealLengthメンバの意味
- 次に示す値のどれか一つを指定します。
- VARCHAR_LENGTH_DEF
- GetFieldメソッドの形式2を使用した場合,又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length:カラムの定義長
RealLength:0
- GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length:切り捨てたデータ長
RealLength:カラムの定義長
- VARCHAR_LENGTH_REAL
- GetFieldメソッドの形式2を使用した場合,又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length:実際のデータ長
RealLength:0
- GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length:切り捨てたデータ長
RealLength:実際のデータ長
nBLOBType
BLOB型データの取得方法として,次のどちらかを指定します。
- TYPE_BLOB_MEMORY
メモリ上に一括して取得します。
ResultSetのレコード数が1の場合,BLOB型データをすべて取得します。
ResultSetのレコード数が複数の場合,先頭から32Kバイトまでを取得します。
- TYPE_BLOB_FILE
ファイルを経由して取得します。
引数lpctBLOBFileNameに指定された名称が,BLOB型データを格納するファイル名称のプレフィックスとして使用されます。
なお,引数swTypeでBUFFER_TYPE_DOUBLEを指定している場合,検索の途中で終了しても先読みしているResultSet分のファイルは作成されます。
lpctBLOBFileName
BLOB型データを格納するファイル名称のプレフィックスを指定します。
引数nBLOBTypeでTYPE_BLOB_FILEを指定した場合,BLOB型データを格納するファイルのプレフィックスには,この引数で指定した名称が使われます。TYPE_BLOB_FILE以外の値を指定した場合は,この引数での指定は無視されます。
BLOB型データを格納したファイル名称は,「プレフィックス+レコード番号+フィールド番号」で表されます。NULLが指定された場合,DABrokerが自動的に名称を生成します。
検索のためのSELECT文と,検索レコードに対するロック方法,検索時にバッファを幾つ使うか,及びBLOB型データの取得方法についてデータベースに通知し,検索結果をResultSetに取得する準備をします。
ファイル上でBLOB型データを扱う場合の制限事項
データの格納されているファイルは,DABrokerが終了しても削除されません。アプリケーション自身で削除してください。
作成されたファイルのアクセス権限は,アプリケーションの実行ユーザ及びデフォルトの権限に依存します。例えば,HP-UX上で"user1"が実行しているアプリケーションで,デフォルトumaskが0666の場合,取得したBLOB型データが格納されるファイルも,"user1"の所有する0666のアクセス権限が付与されたファイルとして生成されます。