SQLが複雑で処理が遅い時
考え方:
- Oracleの場合、「CREATE GLOBAL TEMPORARY TABLE」で「ON COMMIT DELETE ROWS」オプションを付けた、一時テーブルを作成する
※この例では、[集計TEMP]と言う名前とする
- ある程度の途中計算結果をこの一時テーブルに入れる
- このテーブルから、再度計算を再開することで、SQLも単純になる
'コネクト用のオブジェクト準備
Dim conn As New OracleConnection(oradb)
Dim Trans As OracleTransaction = Nothing
Try
conn.Open()
'トランザクション開始
Trans = conn.BeginTransaction(IsolationLevel.ReadCommitted)
Cmd.Transaction = Trans
'SQL発行準備
Dim Cmd As New OracleCommand("", conn)
Cmd.CommandText = "実行したいSQL文1"
Cmd.ExecuteNonQuery() 'SQLの実行
Cmd.CommandText = "実行したいSQL文2"
Cmd.ExecuteNonQuery() 'SQLの実行
…
'完成した集計TEMPからのデータFill
Dim adapter As OracleDataAdapter = New OracleDataAdapter("SELECT * FROM 集計TEMP", conn)
adapter.Fill(DT_集計TEMP)
'トランザクション終了
Trans.Commit()
'使ったオブジェクトをクローズする
conn.Close()
Catch ex As OracleException
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "エラー")
Trans.Rollback()
conn.Close()
End Try