0

私は Oracle PL/SQL を初めて使用し、C# を使用する SQL Server から、アプリケーションの複数のレイヤーに PL/SQL を使用する Oracle カスタム Web アプリケーションに調整しようとしています。

現在、トランザクションのロールバックで問題が発生しています。私は再利用可能なコードを書くことに慣れているので、これらのクラス内のパッケージとメソッドを使用して PL/SQL コードを作成しました。私の更新手順は最初に検証を完了し、正常に検証された場合、一連のさまざまなパッケージ メソッドを呼び出して保存を完了します。残念ながら、更新手順の EXCEPTION 部分でのロールバックでは、Rollback 関数が呼び出されたときにすべてがロールバックされるわけではありません。なぜこれをしているのか、私は途方に暮れています。私の基本的なコード(法的な問題により正確ではありませんが)は次のとおりです。

PROCEDURE SaveApplicationData(
variableName                  IN VARCHAR2 DEFAULT NULL,
--...
seq_id OUT INT )
AS
BEGIN
SET TRANSACTION NAME 'Transaction Name';

  --Save initial program record
  SaveNewRecord(variableName, seq_id);
  IF (seq_id != 0) THEN
    --If saved successfully, seq_id represents record ID
    package_class.secondarySaveMethod(variableName, seq_id);
    second_package_class.anotherSaveMethod(variableName, seq_id);  

END IF;

  COMMIT;
  htp.p('Sequence ID: ' || seq_id);
  htp.p('Saved the record"' || programName || '" successfully!');
EXCEPTION
WHEN OTHERS THEN
 utilityPackage.rollbacktransaction;
END SaveApplicationData;

utilityPackage.rollbacktransaction には、ROLLBACK と、組織で使用されるカスタム エラー例外処理パッケージが含まれています。

基本的に、エラーの原因となったセクションがロールバックされますが、セクションがロールバックされるとすぐに、残りのトランザクションが続行されます (以前に実行されたコード ブロックはロールバックされません)。

これが意味をなさない場合はお知らせください。ご協力いただきありがとうございます。

4

1 に答える 1