タイトル | : Re^2: 一時テーブルへの INSERT |
記事No | : 7856 |
投稿日 | : 2008/07/24(Thu) 15:32 |
投稿者 | : ルイージNO1 |
早速のお返事ありがとうございます。
> 追加されているかどうかはどのように確認されたのでしょうか? > on commit句を省略した場合、on commit delete rows となります。 > この場合、データはトランザクション内でのみ有効であり、 > トランザクションが終了すると自動的に truncate されます。 > つまり、トランザクション内でなければテーブルは常に空の状態です。 > この点については大丈夫ですか?
こちらの説明が足りなかったようです。申し訳ありません。
はじめは、下記のようにコードを記述しておりました。
strSql = String.Empty strSql = "CREATE GLOBAL TEMPORARY TABLE WORK_BRIDE44 (MEMBER_NO VARCHAR2(9), YOYAKUHIN_KBN NUMBER, SEQNO NUMBER) "
oraTrans = _oraConn.BeginTransaction()
Try _oraCmd = New OracleCommand(strSql, _oraConn) _oraCmd.ExecuteNonQuery()
_oraTrans.Commit()
Catch ex As OracleException If IsNothing(_oraTrans) = False Then _oraTrans.Rollback() End If MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical + MsgBoxStyle.SystemModal, "予期せぬエラー") Cursor = System.Windows.Forms.Cursors.Default Exit Sub End Try
で、一時テーブルを作成し INSERT に関しても、
strSql = String.Empty strSql = "INSERT INTO WORK_BRIDE44(MEMBER_NO,YOYAKUHIN_KBN,SEQNO) VALUES('" & KainNo & "', " & YoyakuKbn & ", " & SEQNO & ")"
oraTrans = _oraConn.BeginTransaction()
Try _oraCmd = New OracleCommand(strSql, _oraConn) _oraCmd.ExecuteNonQuery()
_oraTrans.Commit()
Catch ex As OracleException If IsNothing(_oraTrans) = False Then _oraTrans.Rollback() End If MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical + MsgBoxStyle.SystemModal, "予期せぬエラー") Cursor = System.Windows.Forms.Cursors.Default Exit Sub End Try
という風にしておりましたが、この INSERT 時の
oraCmd = New OracleCommand(strSql, _oraConn) _oraCmd.ExecuteNonQuery()
_oraTrans.Commit()
ここで、Comitまでの処理は問題なく通っていたのですが、実際にこの一時テーブルを使用した SQL を流し、 DataRow = DataTable.Rows.Item(0) と記述すると
「位置 0 に行がありません。」
というようにエラーが返ってきます。おそらく kuroko 様がおっしゃられるように Commit した時点でデータが空になっているからだと調べて思ったので、最初の記述へ変更した経緯です。逆に言えば、
oraCmd = New OracleCommand(strSql, _oraConn) _oraCmd.ExecuteNonQuery()
_oraTrans.Commit()
この部分をどう記述すればいいかご教授願いますでしょうか?
質問の意図が変わってしまったのと、長文になり大変申し訳ありませんがよろしくお願いいたします。
|