1

Sybase ASEには、プライマリテーブルにいくつかの監査テーブルとトリガーがあります。監査は非常に単純で、テーブルごとに挿入/更新/削除のトリガーがあり、操作が挿入、更新、削除のいずれであるか、ユーザーと時刻をマーク/フラグする追加の列を持つ同じ行を単純に挿入します。

現在、監査は重要ではないため、何らかの理由で監査トリガーが失敗した場合は、トリガーを起動した操作全体を強制終了しないようにします。

TableAにTableBに挿入するTriggerAがあるとします。

TableAでStatementXを実行すると、StatmentsYで構成されるTriggerAが起動され、TriggerAはSatementsYでTableBへの挿入に失敗します。現在、通常のパターンは、StatementXとStatementYの両方をロールバックして、整合性を確保することです。

StatementYが失敗した場合に、StatementXが中断されず、StatementXがコミットされたままになるように(つまり、StatementYのみがロールバックされるように)、トリガー内にセーブポイントを作成するという方法はありますか?

4

1 に答える 1

1

それは不可能だと思います。

トリガーは、データ変更ステートメントが完了し、Adaptive Serverがデータ型、ルール、または整合性制約違反をチェックした後にのみ起動します。トリガーとそれを起動するステートメントは、トリガー内からロールバックできる単一のトランザクションとして扱われます。重大なエラーが検出された場合、トランザクション全体がロールバックされます。

詳細については、これを確認してください


追加:ロールバックトリガーに関する情報については、これを確認することもできますが、正確には希望どおりではないと思います。

于 2012-04-19T09:23:13.060 に答える