sql >> データベース >  >> RDS >> Oracle

Oracleでネストされたトランザクションを使用する

    Oracleはネストされたトランザクションをサポートしていません。トランザクションがコミットすると、コミットします。そのため、通常、ストアドプロシージャでトランザクションをコミット(またはロールバック)したくないため、トランザクションのセマンティクスが異なる場合、他の場所でプロシージャを再利用することは困難です。

    ただし、プロシージャの最初にセーブポイントを宣言し、エラーが発生した場合はそのセーブポイントにロールバックすることができます。その後、コミットを削除すると、トランザクションはデータベースコードではなく、アプリケーションコードによってのみ制御されます

    begin
      savepoint beginning_of_proc;
    
      insert/update/delete...
    
    exception 
      when OTHERS then 
        rollback to beginning_of_proc;
        raise;
    end;
    

    ただし、この場合、私のバイアスは、コードにセーブポイントを持たないこと、ロールバックを持たないこと、そして例外をキャッチしないことです。 DMLを実行し、例外がスローされるようにして、アプリケーションでそれらを処理するだけです。



    1. Postgresはサーバーに接続できませんでした

    2. 実行が完了した後、SSISパッケージジョブの結果を確認するにはどうすればよいですか?

    3. PostgreSQLの範囲内の日付リストを取得する

    4. ユーザー定義のレコード・データ型を持つPL/SQLの強力な参照カーソル