OO4Oでは、非同期処理を使用して、SQL文とPL/SQLブロックを非ブロック・モードで実行できます。
非ブロック・モードは、CreateSQLメソッドのオプションです。
※ 詳細はヘルプファイルの「CreateSQLメソッド」と「非同期処理」を参照。
※ 非ブロック・モード = 非同期処理
1) 使用方法
Set orasqlstmt =oradatabase.CreateSQL(sql_statement,options)
2) 「options」について
ORASQL_NONBLK(値:&H4&)を指定する事により、非同期で動作します。
このオプションを使用すると、SQLを起動した後に直ちに制御はクライアント側に戻ってきます。
SQL文、又はPL/SQLはサーバー側で非同期で実行されています。
※ ここで言うSQLとはSQL文、ストアドプロシージャの事を示す。
3) OO4Oの制限事項
※ OO4Oヘルプファイルの「非ブロック化の制約」より
- OraSqlStmtオブジェクトで非ブロック操作を実行中の場合、
このオブジェクトのプロパティまたは属性は変更できません。
進行中の実行に影響を及ぼす可能性があるためです。 - すでにインスタンス化されている他のオブジェクトが接続上に存在する場合、
OraSqlStmtを非ブロック・モードで作成することはできません。 - 非ブロック・コールの完了を待機している間、アプリケーションは
このOraSqlStmtを含むOraDatabaseインスタンスでメソッドや
プロパティを 起動することはできません。
※ これに関してOO4Oヘルプファイルから、回避方法が
記載されているが、完全な方法とは思えない。
4) 標準化からの制限、約束事項
- 非同期処理に使うデータベースへの接続セッションは別途設ける。
つまり、VBアプリは通常版と非同期専用版の2セッションをオープンする。- 通常版 Oracle OO4Oオブジェクト変数
Public poraSess As OraSessionClass
Public poraDb As OraDatabase - 非同期専用版 Oracle OO4Oオブジェクト変数
Public poraSessW As OraSessionClass
Public poraDbW As OraDatabase
Public poraSQLW As OraSqlStmt
- 通常版 Oracle OO4Oオブジェクト変数
- 非同期処理のSQLを起動後は、終了をタイマー監視しない。
理由 : トラフィックを少なくなくす為。 - 非同期処理が完了したら、OraSqlStmtオブジェクト変数は開放する。
理由 : そうしないとエラーが発生する場合がある。<-検証結果。 - ストアドプロシージャを起動する時は、ユーザーアカウントもバインド変数に与える。
ストアドプロシージャでエラー発生時のログに使用する為。 - ストアドプロシージャでエラー発生時はエラーログを出力して終了処理を行う。
- 非同期の終了判定は、NonBlockingStateプロパティだけでなく、
poraDbW.LastServerErr <> 0 かもチェックする。
非同期で動作させるストアドプロシージャの例
● 仕様部 CREATE OR REPLACE PACKAGE SCOTT.PKG_TEST IS TYPE t_ename_tbl IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER; TYPE t_job_tbl IS TABLE OF VARCHAR2(9) INDEX BY BINARY_INTEGER; PROCEDURE st_insert_delete(pc_name IN VARCHAR2,ename_tbl t_ename_tbl, job_tbl t_job_tbl,i_count IN INTEGER); END PKG_TEST; ● 本体部 |
コーディング例
VBからSCOTTデータベースのBONUSテーブルを500件アップデートする。
処理は配列型バインド変数を利用してストアドプロシージャを起動し、非同期で実行される。
Private Sub cmd非同期ストアド起動_Click() On Error GoTo Err_cmd非同期ストアド起動_Click: Dim strSql As String ‘SQL文編集変数 Dim oraPAryEnameW As OraParamArray ‘オラクルの配列バインド変数 Dim oraPAryJobW As OraParamArray ‘オラクルの配列バインド変数 Dim lngRecCnt As Long ‘レコード件数 Dim lngLoopIndex As Long ‘ルール変数 Dim lngstat As Long ‘非同期SQLの状態変数 ‘※事前に前回の非同期処理の終了状態を確認する lngRecCnt = 500 ‘パラメータのデータ型を指定する ‘配列型バインド変数オブジェクトを作成する ‘配列型バインド変数オブジェクトに値をセットする ‘配列型バインド変数のサーバーのストアドプロシージャで非同期に実行する ‘事前に必ずOraSQLオブジェクトを Nothing する。注)こうしないとエラーが出るときがある ‘非同期の起動でエラーがあればここでエラーが帰る ‘パラメータ定義を開放する Exit Sub Err_cmd非同期ストアド起動_Click: |
OO4Oコーディング標準(VB)
初期登録日: 2003年11月12日
最終更新日: 2008年01月26日
< Home ヘ戻る >
ブラウザ画面の文字サイズを変更するショートカットキー
Shortcut Keys
|