|
分類:[.NET 全般]
開発環境
Windows10Pro 20H2
VisualBasic2012
Oracle12c
open_cursors=300
500件程度のデータがある「TEST_TABLE」を全検索し、
1件ずつ「TEST_ADD_TABLE」へデータ追加する以下のコードを実行すると(1回のSQLで実行可能ですがあえて1件ずつ)、
[Oracle][ODBC][Ora]ORA-01000: 最大オープン・カーソル数を超えました。のエラーとなってしまいます(300件目くらい)
トランザクション処理で、繰り返しInsert文を発行する場合、
設定されているオープンカーソル数を超えるデータ件数は扱えないのでしょうか?
それともクローズする方法があるのでしょうか?
何か方法があれば教えて頂けるとありがたいです。
宜しくお願い致します。
ソース
※Try Catch・RollbackTrans等の処理は省いて記載しています
Dim DB As ADODB.Connection
Private Sub TEST()
Dim Rs As ADODB.Recordset
Dim Sql As String
DB = New ADODB.Connection()
DB.Open("DSN=TEST_SERV;USER ID=TEST_USER/PASS")
Rs = New ADODB.Recordset
DB.BeginTrans()
Sql = "Select A, B, C From TEST_TABLE"
Rs.Open(Sql, DB)
Do While Rs.EOF = False
Sql = "Insert Into TEST_ADD_TABLE(A, B, C)"
Sql = Sql & "Values"
Sql = Sql & "("
Sql = Sql & "'" & Rs("A").Value & "',"
Sql = Sql & "'" & Rs("B").Value & "',"
Sql = Sql & "'" & Rs("C").Value & "'"
Sql = Sql & ")"
DB.Execute(Sql)
Rs.MoveNext()
Loop
Rs.Close()
DB.CommitTrans()
DB.Close()
End Sub
|