- PR -

VB.netよりOracleのPL/SQL実行でRollBackエラー(ORA-02074)

1
投稿者投稿内容
a24
会議室デビュー日: 2004/02/08
投稿数: 8
投稿日時: 2004-10-06 16:02
VB.netにてOracleのPL/SQLを呼び出すプログラムを作っています。
PL/SQLのみ実行させる分には、正常時はcommit、異常時はRollBackが
正しく実行されます。
しかし、VB.netよりOleDbを使用してストアドプロシージャを実行すると
正常時は問題なくcommitされるのですが、異常時にException内での
RollBackを実行すると、ORA-02074のエラーが出ます。
システムの構造上、どうしてもストアドプロシージャの中でRollBackを
実行したいのですが、いい方法をご存知ではありませんか?
宜しくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-06 21:09
 PL/SQLのみ実行させる、とは、どのように?SQL*PLUS上ですか?それだと、暗黙でトランザクションがはられますよね。でも、OleDbを使うと、暗黙でAutoCommitですよ。

 また、PL/SQLの異常時処理をどのように行っているのでしょう?ORA-02074がでるのは、PL/SQLのRoleBack処理ですか、それともVB.NETのコードでのRoleBack処理でしょうか。

 で、ORA0-02704が、どういうエラーで、どういうときに送出されるか、調べました?「親トランザクションからCommit/RoleBackしろ」ということなので、PL/SQLの中からそれらを行おうとしているのだと思います。このエラーから逆に考えると、PL/SQLは、OleDbのコネクションを使いながら、別のトランザクションで実行されていると思われます。なので、PL/SQLでは「Commit/RoleBackしなければならない」ことを返してVB.NETコードでCommit/RoleBackするか、PL/SQLの宣言で「pragma autonomous_transaction;」を宣言して、自立トランザクションで実行するか、というところでしょうか。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)