タイトル : Re^2: 一時テーブルへの INSERT 投稿日 : 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() この部分をどう記述すればいいかご教授願いますでしょうか? 質問の意図が変わってしまったのと、長文になり大変申し訳ありませんがよろしくお願いいたします。 |