• 締切済み

ORACLE PRO*CからPLSQL(パッケージ)を使用した場合のトランザクション処理について

ORACLE PRO*CからPLSQL(パッケージ)を使用した場合のトランザクション処理について教えて下さい。 ORACLE PRO*CからPLSQL(パッケージ)を呼び出して います。PLSQLの中でコミット・ロールバックせずにPRO*C側で制御したいのですが。PLSQL(パッケージ) 内で別のPLSQLを呼出したり、BEGIN-ENDを多様すると PLSQL内で自動的にコミットが発生している様に思わ れます。何か方法はないものでしょうか。 御存知の方、御教示をお願いします。

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

記憶が定かではありませんが、以下の場合内部的にCommit が発行された と思います。 ・DDL が発行された時 ・Stored Procedure 内でデータを更新して、COMMIT/ROLLBACK をしない 状態でセッションが切断された時 それでも分からないようであれば、一度実行時のトレースを採取してみては どうでしょうか?

関連するQ&A

  • C# トランザクション処理

    DataSetのTableAdapterでSQL Serverへのデータ挿入、更新、削除を行います。 try { ta.UpdataQuery(.....); } catche { Exception; } といった処理をしますが、トランザクション処理をする場合、 try { // トランザクション開始 ta.UpdataQuery(.....); // コミット } catche { // ロールバック Exception; } といった感じになるかと思いますが、どのようにコードを書けばよいのでしょうか?手元にコードがありませんので詳細が書けませんが、よろしくお願いします。

  • PHP-オラクルでのトランザクション

    PHP-オラクルでのトランザクションについて 教えてください。 *すべてPHP(OCI8関数)のWEBアプリからが前提です。 1.OCIExecute()でOCI_DEFAULT(自動コミットOFF)を指定した状態で   コミット(OCICommit)をせずにログオフ(OCILogoff)した場合、 コミットされるのか、それともロールバックされるのか? 2.OCIExecute()でOCI_DEFAULT(自動コミットOFF)を指定した状態で   コミット(OCICommit)もログオフ(OCILogoff)もしていない状態で WEBブラウザを閉じた場合、コミットされるのか、それとも   ロールバックされるのか? の2点です。自分で試せればいいのですが、もうしばらくの間 オラクル環境がないまま、プログラムを作成しなければならない状況です。。。 ご存知の方がおりましたらご教授していただければ幸いです。 よろしくお願いします。

  • ACCESSでのトランザクション処理

    VB6+ACCESS2000で開発をしております。 VBとACCESSとの接続はADOでおこなっております。 ACCESSはそれほど使ったことがないのでよくわからないのですが、ACCESSでトランザクション処理はできるのでしょうか? ロールバックもコミットも見たところありませんでした。 教えてください。

  • トランザクション処理について

    質問させて下さい。 以下の処理を行なっております。 1. トランザクション処理開始 2. テーブルAからデータをDELETE 3. テーブルBへデータをINSERT 4. トランザクション処理終了 上記処理の場合の「TYPE=InnoDB」指定の仕方が不安です。 現在はロールバックの可能性のあるテーブルAのみ「TYPE=InnoDB」を指定しています。 その状態でコミットもうまくいっているのですが、テーブルBに「TYPE=InnoDB」を 指定しなくてもよいものなのでしょうか。 環境 MySql 4.0.24

    • ベストアンサー
    • MySQL
  • pro*cによるdml文のトランザクションについて

    pro*cを使ってoracle 10g へinsert処理を行った際の戻り値はコミット処理が終わってから生成されるのかチェックポイントを発生させてから返されるのかどちらになるかわかる方いらっしゃいましたらご教授ねがいます。

  • ActiveX DLLでのオラクルのトランザクション

    VB6とOracle9iのOO4Oにてシステムを構築しておりますが、一つ解らないことがありましたので、どなたかご教授願います。 あるPG(通常のEXEです)よりActiveX DLLを呼び出してOracleの表へデータを挿入する処理があります。呼び出し元となる通常のEXEはまずOracleの接続処理を記述しています。正常に接続が完了したならトランザクションを開始し、表のDeleteを実行します。その後ActiveX DLLを呼び出して表のInsertを実行しています。再び通常のEXEに制御が戻り、トランザクションの完了(COMMIT)または破棄(ROLLBACK)を行います。しかし、最後のトランザクションのCOMMIT(ROLLBACK)を行うと『コッミト(ロールバック)時にアクティブなトランザクションがありません』というエラーが発生してしまいます。正しくBegin Transactionを実行しているのに、これはどういうこと何のでしょうか。ご存知の方がいらっしゃましたら教えてください。

  • トランザクション処理について

    トランザクション処理について、ちょっと疑問に思うことがあります。 トランザクション処理とは、クライアントの異常終了などで、中途半端な状態で終わったデータはロールバックされ、元の状態にもどされることですよね?では、サーバが突然フリーズした場合どうなるのでしょうか?トランザクション処理もできないため、中途半端な状態で終わったデータは手動で整合性を合わせる必要があるのでしょうか? かなり、基本的なことを聞いていますが、DBの知識がないためどなたか教えてください。

  • C#でトランザクション開始後参照出来ない

    言語:C# DB:SQLServer2008 1.トランザクション開始 2.テーブルAをUPDATE 3.色々な処理(省略) 4.テーブルAのUPDATE前の情報を参照 5.参照したテーブルをもとにテーブルBをUPDATE 6.すべての処理が正常だったら全テーブルコミット、1つでも失敗したら全テーブルロールバック 問題となっているのは 4.テーブルAのUPDATE前の情報を参照する際に、テーブルAがロックされていて参照出来ないことです。 トランザクション開始時に分離レベルを設定してみましたが同じ結果でした。 tran = con.BeginTransaction(分離レベル); お分かりになる方ご教授お願いします。

  • 「トランザクション処理」について質問

    Oracle Database 11g の 「トランザクション処理」について質問。 認識:UPDATE文が発行されるとキャッシュに更新前の情報(UNDOセグメント)が生成される。 REDOログバッファにREDOログを生成する。 UPDATE文が正しく行われたことを、プロンプトに返す。 この時、REDOログファイルにはまだ書き込まれていない。 データファイルにも書き込まれていない。 質問:このコミットされていない状態で、障害が起きた(メモリが飛んだ)場合、 コミット前の状態にしか戻れないですか? データベースの概要のACID特性の一貫性は、 トランザクションの一貫性ということですか? また、UPDATA文を発行し、プロンプトが返ってくるが、 これは嘘になりえるっていうことでしょうか? よろしくおねがいします。

  • ADO接続のトランザクション処理

    SQL2005のDBに対して ADOのconnectionオブジェクトで接続しているのですが、 下記のようにトランザクションを開始し、SQLを実行し、 エラーが発生してロールバックを行っていない場合、 2個目のSQLがいつまでたってもロック状態でタイムアウトになりません。 このような場合、ADOconnectionのコマンドタイムアウトのデフォルト値30秒で タイムアウトとなり、ロールバックされないのでしょうか? 以下adoコネクションオブジェクトをConnobjと表記します Connobj.BeginTrans Connobj.Execute "Insert into AAA・・・・" ← このInsert文で失敗 Connobj.Execute "Update BBB SET ・・・・" ← このUpdateは成功 ※ロールバックもコミットも行わない  (プログラムの不具合でロールバックができなかった場合や、  アプリで異常が発生してロールバックが行えない等) お手数をおかけしますが、何かご存知の方、ご教授願います。