1

ID主キーを含むテーブルAを持つFirebirdデータベースがあります。
そして、A.IDへのA_ID外部キーを含むテーブルBのような他のいくつかのテーブル(アクションなしの削除時)。

A の行を削除できるかどうか、ストアド プロシージャをチェックインしたいと思います。
エラーなしで削除できる場合にのみ、実際に削除しないでください。

しかし、A への外部キーを持つ他のすべてのテーブルをチェックしたくありません。

私が必要とするのは次のようなものです:

  1.  

    safepoint X;  
    delete from A where ID = 1;  
    when any do  
    begin  
      return = 'false';  
    end  
    rollback to X;  
    

    ただし、ストアド プロシージャではセーブポイントを使用できません。

または

  1. A.ID を参照する他のテーブルに行があるかどうかを確認する方法。
    他のすべてのテーブルを手動で選択することなく。

これを行う方法はありますか?

4

2 に答える 2

0

マークが言ったように、で実行できますIN AUTONOMOUS TRANSACTION。自動的にコミットされますが、最後のコマンドとしてそこで例外をスローでき、その場合はロールバックされます。

しかし、あなたの場合、最初に削除してロールバックしようとします(いずれにせよ)。エラーが発生した場合、完了できません。それ以外の場合は、説明した他のアクションを続行できます。これは、ストアド プロシージャと をいじるよりも安価ですautonomous transaction

于 2013-08-29T09:29:48.020 に答える