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

タイトル 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()

この部分をどう記述すればいいかご教授願いますでしょうか?

質問の意図が変わってしまったのと、長文になり大変申し訳ありませんがよろしくお願いいたします。

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

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