tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル オラクルのセッションが残ってしまう
投稿日: 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                 'オブジェクト開放

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。