タイトル | : オラクルのセッションが残ってしまう |
記事No | : 13707 |
投稿日 | : 2009/05/29(Fri) 10:10 |
投稿者 | : NEMO |
オラクル10gとVB6.0を使用しています。 テキストファイルより情報を読み出しSQLを発行、その結果セットを利用してストアドを実行するプログラムを作成しましたが、セッションが切断されずに残り、最終的にオラクルのセッション上限に達してしまいオラクルエラーORA-12516が発生する現象が起こっています。
以下に簡略化したソースを提示いたしますが、厳密にセッションを切断する方法がございましたらご教授のほどよろしくお願い致します。
Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'oo4oオブジェクト生成
★
<<変数A>> = 〜 テキストファイルを読み込み取得 〜
strSQL = "〜 SQL文 〜" & <<変数A>>
Set OraDatabase = OraSession.OpenDatabase(strSV, strConn, ORADB_DEFAULT) 'DB接続 Set OraDynaset = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行
If OraDynaset.RecordCount <> 0 Then <<変数B>> = OraDynaset.Fields("XXX").Value End If
OraDatabase.Close OraDynaset.Close Set OraDatabase = Nothing 'オブジェクト開放 Set OraDynaset = Nothing
★
Set OraDatabase = OraSession.OpenDatabase(strSV, strConn, ORADB_DEFAULT) 'DB接続
OraSession.BeginTrans 'トランザクション開始
Call OraDatabase.Parameters.Add("ret", 0, ORAPARM_OUTPUT) Set pret = OraDatabase.Parameters("ret") pret.serverType = ORATYPE_NUMBER
Call OraDatabase.Parameters.Add("pvErrCode", Null, ORATYPE_VARCHAR2) Call OraDatabase.Parameters.Add("pvErrMesg", Null, ORATYPE_VARCHAR2) Call OraDatabase.Parameters.Add("pvProgramName", Null, ORATYPE_VARCHAR2)
'** ストアドファンクション実行 Call OraDatabase.ExecuteSQL("begin :ret := ストアドA(:pvErrCode,:pvErrMesg,:pvProgramName); end;") <<変数C>> = pret.Value '** パラメタ解消 OraDatabase.Parameters.Remove "ret"
OraSession.CommitTrans 'トランザクションコミット
OraDatabase.Close Set OraDatabase = Nothing 'オブジェクト開放
★
Set OraDatabase = OraSession.OpenDatabase(strSV, strConn, ORADB_DEFAULT) 'DB接続
OraSession.BeginTrans 'トランザクション開始
Call OraDatabase.Parameters.Add("XXXX", <<変数A>>, ORATYPE_VARCHAR2) ・ ・ ・ Call OraDatabase.Parameters.Add("XXXX", <<変数B>>, ORATYPE_VARCHAR2)
Call OraDatabase.ExecuteSQL("Begin ストアドB(:XXXX,・・・,:XXXX); end;")
OraSession.CommitTrans 'トランザクションコミット
OraDatabase.Close Set OraDatabase = Nothing 'オブジェクト開放
★
Set OraDatabase = OraSession.OpenDatabase(strSV, strConn, ORADB_DEFAULT) 'DB接続
OraSession.BeginTrans 'トランザクション開始
Call OraDatabase.Parameters.Add("XXXX", <<変数A>>, ORATYPE_VARCHAR2) ・ ・ ・ Call OraDatabase.Parameters.Add("XXXX", <<変数B>>, ORATYPE_VARCHAR2)
Call OraDatabase.ExecuteSQL("Begin ストアドC(:XXXX,・・・,:XXXX); end;")
OraSession.CommitTrans 'トランザクションコミット
OraDatabase.Close Set OraDatabase = Nothing 'オブジェクト開放
★
Set OraSession = Nothing 'オブジェクト開放
|